QT学习 之 对话框 (三) 标准颜色对话框


点击打开链接QColorDialog类的文档

QRgb:

在Qt中,这个颜色可以这样表示:QRgb red = qRgba(255, 0, 0, 255),由于图片不是透明的,也可以如下简单表示QRgb red = qRgb(255, 0, 0)。
QRgb实际上是一个unsigned int类型,内联函数qRgb(),qRgba()只是把分量值合成一个32为整数。QRgb red = 0xffff0000。第一个ff为alpha分量值,第二个ff为红色的分量值。在IconEditor中我们设置alpha分量为0,得到一个透明的图片。
Qt提供了两种颜色有关的类:QRgb和QColor。在QImage中使用的QRgb只是一个32位的象素数据。QColor是一个有很多功能的类,在Qt中使用的很多。在这个控件中,我们只是在处理QImage的时候使用了QRgb,其他地方都是用的QColor,penColor属性也是使用的QColor类型。

emit:
emit是发出信号,对应的是接收信号,之前的connect就是接收信号的相关连接函数。
说白了,就是调用findPrevious或者findNext信号对应的槽函数,emit之前,在某个地方,肯定有connect把信号和槽进行关联,关联了之后,emit某个信号,就相当于调用这个信号connect时所关联的槽函数,就这么简单而已。

colordlg.h

#ifndef COLORDLG_H
#define COLORDLG_H

#include <QMainWindow>
#include <QApplication>
#include <QPushButton>
#include <QDialog>
#include <QGridLayout>
#include <QWidget>
#include <QHBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QDialogButtonBox>
#include <QGridLayout>
#include <QDialog>
#include <QtGui>
#include <QString>
#include <QVBoxLayout>
#include <QInputDialog>
#include <QMessageBox>
#include <QColorDialog>

namespace Ui {
class ColorDlg;
}

class ColorDlg : public QDialog
{
    Q_OBJECT
    
public:
    explicit ColorDlg(QWidget *parent = 0);
    ~ColorDlg();

signals:
    void setTxt(QString txt);

public slots:
    void inputtxt();
    void show_clr();

private:
    Ui::ColorDlg *ui;
    QPushButton *btnok;
    QPushButton *btncolor;
    QLabel * labeltxt;
    QString txt;
    QWidget * pParent;
};

#endif // COLORDLG_H

colordlg.cpp
其中用到了一些QMessageBox类的相关函数

#include "colordlg.h"
#include "ui_colordlg.h"

ColorDlg::ColorDlg(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::ColorDlg)
{
//    ui->setupUi(this);
    btnok = new QPushButton("ok");
    labeltxt = new QLabel("showtext");
    btncolor = new QPushButton("color dlg");
    QVBoxLayout *layout = new QVBoxLayout;
    pParent = parent;
    layout->addWidget(btnok);
    layout->addWidget(btncolor);
    layout->addWidget(labeltxt);

    connect(btnok, SIGNAL(clicked()), this, SLOT(inputtxt()));
    connect(this,SIGNAL(setTxt(QString)), labeltxt,SLOT(setText(QString)));
    connect(btncolor,SIGNAL(clicked()),this,SLOT(show_clr()));
    resize(300,200);    //改变窗口大小
    setLayout(layout);
}

ColorDlg::~ColorDlg()
{
    delete ui;
}

void ColorDlg::show_clr()
{
    QColorDialog::setCustomColor(0,QRgb(0x0000FF));
    QColor color =  QColorDialog::getColor(QColor(0,255,0));
//    QColor color =  QColorDialog::getColor(QColor(0,255,0),pParent,tr("Color You Like"));
    QString str;
    if(color.isValid())
    {
        str.sprintf("R:%d G:%d B:%d",color.red(), color.green(), color.blue());
        QMessageBox::information(0,"Get Selected Color",str,QMessageBox::Ok,QMessageBox::Yes);
    }
}

void ColorDlg::inputtxt()
{
    bool isOk;
    txt = QInputDialog::getText(pParent, "Input Dialog",
                                "Please input your Text",
                                 QLineEdit::Normal,"", &isOk);
    if(isOk)
    {
        QMessageBox ::information(pParent, "information",
                                  "Your comment is <b><color = red>" + txt + "</b></color>",
                                   QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes);
        emit(setTxt(txt));
    }
}

main.cpp
#include <QApplication>
#include "colordlg.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    ColorDlg w;
    w.show();
    return a.exec();
}


你可能感兴趣的:(QT学习 之 对话框 (三) 标准颜色对话框)