Qt学习之内建对话框

本文详细介绍了在Qt环境中如何使用内建对话框,包括信号与槽的连接、文本编辑功能、系统对话框和C++实现的输入对话框。通过对实例的分析,帮助开发者更好地理解和应用Qt的内置对话框功能。
摘要由CSDN通过智能技术生成

//main.cpp

#include <QApplication>
#include <QTranslator>
#include <QProcess>
#include <QLocale>
#include <QLibraryInfo>
#include <QDebug>
#include <QtGui/QtGui>
#include"mybuiltindlg.h"
int main(int argc,char* argv[])
{
  QApplication app(argc, argv);
  QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
  MyBuiltinDlg mydialog;
  QMessageBox box;
  QTranslator translator;
  {
          QStringList environment = QProcess::systemEnvironment();
          QString str;
          bool bFinded =false;
      foreach(str,environment)
      {
          if(str.startsWith("QTDIR="))
          {
              bFinded =true;
              break;
          }
      }
      if(bFinded)
      {
          str=str.mid(6);
          bFinded =translator.load("qt_"+QLocale::system().name(),
                                   str.append("/translations"));
          if(bFinded)
              qApp->installTranslator(&translator);
          else
          {
             // qDebug() << QObject::trUtf8("没有中文");
          box.setWindowTitle("warning");
           box.setIcon(QMessageBox::Warning);
           box.setText("没有支持中文的国际化翻译软件!!");
           box.setStandardButtons(QMessageBox::Yes);
           box.exec();
          }

      }
      else
      {
          //qDebug() << QObject::trUtf8("必须设置");
          box.setWindowTitle("warning");
           box.setIcon(QMessageBox::Warning);
           box.setText("必须设置QTDIR环境变量!!");
           box.setStandardButtons(QMessageBox::Yes);
           box.exec();
          exit(1);
      }
  }
  return mydialog.exec();
}

//mybuiltin.h

#ifndef CBUILTINDLG_H
#define CBUILTINDLG_H

#include <QDialog>
class QTextEdit;
class QPushButton;
class MyBuiltinDlg : public QDialog
{
    Q_OBJECT
public:
    explicit MyBuiltinDlg(QWidget *parent = 0);
    virtual ~MyBuiltinDlg(){}
signals:
    
public slots:
    void doPushBtn();
private:
    QTextEdit* displayTextEdit;
    QPushButton* colorPushBtn;
    QPushButton* errorPushBtn;
    QPushButton* filePushBtn;
    QPushButton* fontPushBtn;
    QPushButton* inputPushBtn;
    QPushButton* pagePushBtn;
    QPushButton* progressPushBtn;
    QPushButton* printPushBtn;
};

#endif // CBUILTINDLG_H

//mybuiltin.cpp

#include "mybuiltindlg.h"
#include<QtGui/QtGui>
MyBuiltinDlg::MyBuiltinDlg(QWidget *parent) :
    QDialog(parent)
{
    displayTextEdit =new QTextEdit(trUtf8("Qt标准通用对话框!!"));
    QGridLayout* gridLayout = new QGridLayout;
    colorPushBtn            = new QPushButton(trUtf8("clor"));
    errorPushBtn            = new QPushButton(trUtf8("error"));
    filePushBtn             = new QPushButton(trUtf8("file"));
    fontPushBtn             = new QPushButton(trUtf8("font"));
    inputPushBtn            = new QPushButton(trUtf8("input"));
    pagePushBtn             = new QPushButton(trUtf8("page"));
    progressPushBtn         = new QPushButton(trUtf8("progress"));
    printPushBtn            = new QPushButton(trUtf8("print"));

    gridLayout->addWidget(colorPushBtn,0,0,1,1);
    gridLayout->addWidget(errorPushBtn,0,1,1,1);
    gridLayout->addWidget(filePushBtn,0,2,1,1);
    gridLayout->addWidget(fontPushBtn,1,0,1,1);
    gridLayout->addWidget(inputPushBtn,1,1,1,1);
    gridLayout->addWidget(pagePushBtn,1,2,1,1);
    gridLayout->addWidget(progressPushBtn,2,0,1,1);
    gridLayout->addWidget(printPushBtn,2,1,1,1);
    gridLayout->addWidget(displayTextEdit,3,0,3,3);

    setLayout(gridLayout);

    connect(colorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(errorPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(filePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(fontPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(inputPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(pagePushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(progressPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    connect(printPushBtn,SIGNAL(clicked()),this,SLOT(doPushBtn()));
    setWindowTitle(trUtf8("内建对话框"));
    resize(400,300);
}
void MyBuiltinDlg::doPushBtn()
{
    /*
     *槽函数的开头是获取发送信号的QPushButton对象指针。函数QObject::sender()
     *返回发送信号的对象的指针,返回类型为QObject*, qobject_cast是模板函数,
     *这里C++不太懂,
     */
    QPushButton* btn = qobject_cast<QPushButton*>(sender());
    if(btn == colorPushBtn)
    {//颜色对话框
        //QTextEdit::palette()获取文本编辑框对象的调色板
        QPalette palette = displayTextEdit->palette();
        /*
          *调用QColorDialog::getColor()函数创建并显示一个模态的颜色对话框
          *并返回用户选择的颜色对象的常量引用(对临时对象的引用是无效的,必须使
          *用常量引用)赋值变量color
          *颜色对话框的颜色初始化为palette.color(QPalette::Base),即文本编辑
          *框的背景色,父窗口部件为this
          */
        const QColor& color =
                QColorDialog::getColor(palette.color(QPalette::Window),this);
        if(color.isValid())
        {
            /*
              *color.isValid()判断函数是否有效
              *palette.setColor有两个参数第一个参数是指定调色板的角色
              ×该函数会影响到所有的三个颜色组
              ×第二个参数是指定应该设置的颜色
              *重新设置文本编辑框的调色板
              */
            palette.setColor(QPalette::Base,color);
            displayTextEdit->setPalette(palette);
        }
    }
    else if(btn == errorPushBtn)
    {
        //错误对话框
        QErrorMessage box(this);
        box.setWindowTitle(trUtf8("错误消息框"));
        box.showMessage(trUtf8("错误消息框实例xx"));
        box.showMessage(trUtf8("错误消息框实例yy"));
        box.showMessage(trUtf8("错误消息框实例zz"));
        box.showMessage(trUtf8("错误消息框实例xx"));
        box.showMessage(trUtf8("错误消息框实例xx"));
        box.exec();
    }
    else if(btn ==filePushBtn)
    {
        //文件对话框
        QString filename = QFileDialog::getOpenFileName(
                    this,
                    trUtf8("打开文件"),
                    "/home/pillar",
                    trUtf8("任何文件(*.*)"
                    ";;文本文件(*.txt)"
                    ";;XML文件(*.xml)"));
        displayTextEdit->setText(filename);
    }
    else if(btn == fontPushBtn)
    {
        bool ok;
        const QFont& font = QFontDialog::getFont(&ok,
                                                 displayTextEdit->font(),
                                                 this,
                                                 trUtf8("字体对话框"));
        if(ok)
        {
               displayTextEdit->setFont(font);
        }
    }
    else if(btn == inputPushBtn)
    {
        bool ok;
        QString text = QInputDialog::getText(this,
                                             trUtf8("输入对话框"),
                                             trUtf8("输入文本"),
                                             QLineEdit::Normal,
                                             QDir::home().dirName(),
                                             &ok);
        if(ok && !text.isEmpty())
            displayTextEdit->setText(text);
    }
    else if(btn == pagePushBtn)
    {
        QPrinter printer;
        QPageSetupDialog dlg(&printer,this);
        dlg.setWindowTitle(trUtf8("页设置对话框"));
        if(dlg.exec()== QDialog::Accepted)
        {

        }
    }
    else if(btn == progressPushBtn)
    {
        QProgressDialog progree(trUtf8("正在复制....."),
                                trUtf8("cancel"),
                                0,
                                10000,this);
        progree.setWindowModality(Qt::WindowModal);
        progree.setWindowTitle(trUtf8("进度对话框"));
        progree.show();
        for(int i = 0;i < 10000;i++)
        {
            progree.setValue(i);
            qApp->processEvents();//保证事件循环还可以处理其他事件
            if(progree.wasCanceled())
                break;
            qDebug() << i;
        }
        progree.setValue(10000);
    }
    else if(btn == printPushBtn)
    {
        QPrinter printer;
        QPrintDialog dlg(&printer,this);
        dlg.setWindowTitle(trUtf8("打印对话框"));
        if(dlg.exec() == QDialog::Accepted)
        {

        }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值