何永琪吧 关注:5贴子:243

Qt 个人资料整理

只看楼主收藏回复

http://bbs.csdn.net/topics/391865566


IP属地:黑龙江1楼2016-06-21 10:56回复
    标准输入框( QInputDialog)
    本小节讲解如何使用标准输入框。
    在Qt中,构建标准输入框通常使用QinputDialog类。
    QInputDialog类提供了一种简单方便的对话框来获得用户的单个输入信息。
    目前 Qt提供了4种数据类型的输入,可以是一个字符串、一个 int类型数据、一个double类型数据或者是一个下拉列表框的条目。
    此外,一般情况下在输入框的附近应该放置一个标签窗口部件,告诉用户需要输入什么样的值。
    经常使用的方法有4个: getText(), getInt(), getDouble()和getItem(),它们都是QInputDialog类的静态方法,使用起来也非常简便,请看下面的示例代码。
    bool ok;
    QString text = QInputDialog::getText(this, tr("User Name"),
    tr("Please input new name"),
    QLineEdit::Normal,QDir::home().dirName(), &ok);
    if (ok && !text.isEmpty())
    {
    textLabel->setText(text);
    }


    IP属地:黑龙江2楼2016-06-22 14:56
    回复
      标准颜色对话框( QColorDialog)
      标准颜色选择对话框被用来为应用程序指定颜色。比如,在一个绘图应用程序中选择画刷的颜色等。
      典型的标准颜色对话框我们经常使用QColorDialog类的静态方法getColor()来创建标准颜色选择对话框。
      在其中除了为用户提供了颜色选择面板外,还可以允许用户选择不同的透明度的颜色。
      在使用QColorDialog类之前,需要引入其头文件声明。#include <QColorDialog>


      IP属地:黑龙江3楼2016-06-22 14:58
      回复
        标准颜色对话框( QColorDialog)
        QColor color = QColorDialog::getColor();
        if( color.isValid() )
        {
        QPalette palette;
        palette.setColor(QPalette::WindowText,color);
        ui->label->setPalette(palette);
        //QString str;
        //str = "color:"+color.name();
        //ui->label->setStyleSheet(str);
        //ui->label->setPalette(QPalette(color));
        //ui->label->setAutoFillBackground(true);
        }


        IP属地:黑龙江4楼2016-06-22 14:59
        回复
          标准字体对话框( QFontDialog)
          标准字体对话框为用户选择字体提供了便捷的途径。
          标准字体对话框通常有两种方式创建字体对话框,
          一种是使用 QFontDialog类的构造函数,
          一种是使用QFontDialog类的静态方法getFont()。
          在使用QFontDialog类之前,应加入其头文件声明:#include <QFontDialog>


          IP属地:黑龙江5楼2016-06-22 15:00
          回复
            标准消息对话框( QMessageBox)
            在程序开发中,经常会遇到各种各样的消息框来给用户一些提示或提醒, Qt提供了QMessageBox类来实现此项功能。
            在使用 QMessageBox类之前,应加入其头文件声明:#include <QMessageBox>
            Question消息框、 Information消息框、 Warning消息框和Critical消息框的用法大同小异,这些消息框一般都包含一条提示信息、一个图标以及若干个按钮,它们的作用都是给用户提供一些提醒或一些简单的询问。
            常有两种方法可以用来创建标准消息对话框。
            一种是采用“基于属性的”API,
            一种是使用QMessageBox的静态方法。
            这两种方法各有所长,使用静态方法是比较容易的,但是缺乏灵活性,并且针对用户给出的提示信息不够丰富,并且不能自定义消息对话框里面的按钮提示信息。因此, “基于属性的”API的方法更值得推荐


            IP属地:黑龙江6楼2016-06-22 15:02
            回复
              标准消息对话框( QMessageBox)
              基于属性的API方法这种方法的要领如下。
              第1步,创建一个QMessageBox的实例
              第2步,设置必要的属性信息,通常只需设置 messagetext属性即可。
              第3步,调用exec()方法显示这个消息框。
              下面是一段示例代码。
              QMessageBox msgBox;
              msgBox.setText(tr("The document has been modified."));
              msgBox.exec();


              IP属地:黑龙江7楼2016-06-22 15:03
              回复
                标准消息对话框( QMessageBox)
                用QMessageBox类的静态方法这种方法使用起来比较简单,一句程序就可以实现,
                1 QMessageBox::StandardButton reply;
                2 reply = QMessageBox::critical(this, tr("QMessageBox::critical()"),MESSAGE,QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore);
                3 if (reply == QMessageBox::Abort){
                4 criticalLabel->setText(tr("Abort"));}
                5 else if (reply == QMessageBox::Retry){
                6 criticalLabel->setText(tr("Retry"));}
                7 else{
                8 criticalLabel->setText(tr("Ignore"));}


                IP属地:黑龙江8楼2016-06-22 15:04
                回复
                  关于QFrame类的使用一般继承自QWidget的类都可以设置它的 frame属性。
                  比如QLabel类的窗口在默认情况下拥有一个平面的( flat)观感,而QProgressBar类的窗口则拥有一个向下凹陷( sunken)的观感。
                  当然这些都是可以通过设置它们的 frame而改变的。
                  下面是一段示意代码,演示了如何设置窗口部件的 frame。
                  QLabel label(...);
                  label.setFrameStyle(QFrame::Panel | QFrame::Raised);
                  label.setLineWidth(2);
                  QProgressBar pbar(...);
                  label.setFrameStyle(QFrame::NoFrame);
                  一个窗口部件的frame有两个重要的属性,一个是shapes,一个是style。
                  style由QFrame::Shape和QFrame::Shadow枚举值共同来指定,它们可以使设置了frame的窗口部件与其他的区分开来。
                  一般可以使用 setFrameStyle()方法来设置frame的属性,而使用frameStyle()方法来读取该设置。setFrameStyle()的原型如下:
                  void QFrame::setFrameStyle ( int style )
                  它的作用就是设置该窗口部件的 frame为style。
                  常见的各种应用程序的frame的观感如图所示


                  IP属地:黑龙江9楼2016-06-22 16:45
                  回复
                    专题: QGroupBox类的使用
                    QGroupBox为构建分组框提供了支持。
                    分组框通常带有一个边框和一个标题栏,作为容器部件来使用,在其中可以布置各种窗口部件。
                    分组框的标题通常在上方显示,其位置可以设置为靠左、居中、靠右、自动调整这几种方式之一。
                    位于分组框之中的窗口部件可以获得应用程序的焦点。
                    位于分组框之内的窗口部件被称作是它的子窗口,通常使用 addWidget()方法把子窗口部件加入到分组框中。
                    使用分组框的一般步骤如下:
                    ⒈实例化分组框对象使用QGroupBox构造函数来实例化分组框对象,
                    示例代码如下:
                    QGroupBox *groupBox = new QGroupBox(tr("Exclusive Radio Buttons"));
                    ⒉创建位于分组框之中的子窗口部件,同样使用该窗口部件的构造函数来实现,
                    示例代码如下:
                    QRadioButton *radio1 = new QRadioButton(tr("&Radio button 1"));
                    ⒊创建一个布局这个布局就是后面要设置在分组框之上的布局,
                    Qt提供的常见布局类型比如水平布局、垂直布局、栅格布局、表单布局等都可以,目前还不支持分裂器布局。示例代码如下:
                    QVBoxLayout *vbox = new QVBoxLayout;
                    ⒋把第2步创建的子窗口部件加入到第3步创建的布局之中一般使用addWidget()或者insertWidget()方法把子窗口部件加入到布局之中。
                    示例代码如下:
                    QVBoxLayout *vbox = new QVBoxLayout;
                    vbox->addWidget(radio1);
                    ⒌把第3步创建的布局应用到分组框上最后,使用setLayout()方法把布局应用到分组框上,
                    示例代码如下:
                    groupBox->setLayout(vbox);
                    注意,创建分组框及其内部的子窗口部件时,以上次序不要改变。
                    当分组框内部没有子窗口部件时,是无法为其应用布局的。
                    再有就是,要牢固记得 QGroupBox是QWidget的子类, QWidget的公有方法,它的对象都可以使用,它本身就是一个窗口部件。
                    最后,一般情况下,在应用程序中只要使用了分组框,就要为它应用一个布局,请读者朋友注意体会。


                    IP属地:黑龙江10楼2016-06-22 16:52
                    回复
                      模态对话框与非模态对话框
                      模态对话框( Modal Dialog)与非模态对话框( Modeless Dialog)的概念不是 Qt所独有的,在各种不同的平台下都存在。
                      又有叫法是称为模式对话框,无模式对话框等。
                      所谓模态对话框就是在其没有被关闭之前, 用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。
                      对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。
                      在Qt中,显示一个对话框一般有两种方式,
                      一种是使用 exec()方法,它总是以模态来显示对话框;
                      另一种是使用 show()方法,它使得对话框既可以模态显示,也可以非模态显示,决定它是模态还是非模态的是对话框的 modal属性。
                      在Qt中, Qt的模态与非模态对话框选择是通过其属性 modal来确定的。
                      我们来看看modal属性,其定义如下:modal : bool
                      默认情况下,对话框的该属性值是 false,这时通过show()方法显示的对话框就是非模态的。
                      而如果将该属性值设置为 true,就设置成了模态对话框,其作用于把QWidget::windowModality属性设置为Qt::ApplicationModal。
                      而使用exec()方法显示对话框的话,将忽略 modal属性值的设置并把对话框设置为模态对话框。
                      一般使用setModal()方法来设置对话框的 modal属性


                      IP属地:黑龙江11楼2016-06-22 17:41
                      回复
                        我们总结一下设置对话框为模态的方法。
                        ◆ 如果要设置为模态对话框,最简单的就是使用 exec()方法,
                        示例代码如下:
                        MyDialog myDlg;
                        myDlg.exec();
                        也可以使用show()方法,
                        示例代码如下:
                        MyDialog myDlg;
                        myDlg.setModal(true);
                        myDlg.show();
                        ◆ 如果要设置为非模态对话框,必须使用 show()方法,
                        示例代码如下:
                        MyDialog myDlg;
                        myDlg.setModal(false); //或者 myDlg.setModal();
                        myDlg.show();
                        再次强调,目前有的朋友对于模态对话框和非模态对话框的认识有误解,认为使用show()方法显示的就是非模态对话框,这是不正确的。
                        小贴士:
                        有时候,我们需要一个对话框以非模态的形式显示,但又需要它总在所有窗口的最前面,
                        这时可以通过如下代码设置:
                        MyDialog myDlg;
                        myDlg.setModal(false);//或者myDlg.setModal();
                        myDlg.show();
                        //关键是下面这行
                        myDlg.setWindowFlags(Qt::WindowStaysOnTopHint);


                        IP属地:黑龙江12楼2016-06-22 17:43
                        回复
                          问题与解答
                          问:
                          内建对话框的控件怎么改文本?
                          比如说QMessageBox::critical(this, QObject::tr("警告! "), QObject::tr("请正确输入! "));
                          我要把显示的OK按钮文本改为“ 确定”,怎么获得OK的指针?
                          答:
                          在本章前面已经讲到,这种情况下不要使用 QMessageBox类的静态方法,
                          下面是一个类似这种需求时的示例代码:
                          QMessageBox msgBox;
                          QPushButton *connectButton = msgBox.addButton(tr("Connect"), QMessageBox::ActionRole);
                          QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort);
                          msgBox.exec();
                          if (msgBox.clickedButton() == connectButton)
                          {
                          // connect
                          }else if
                          (msgBox.clickedButton() == abortButton)
                          {
                          // abort
                          }
                          注意重点是QMessageBox类的addButton()方法的使用,其原型可以通过查阅帮助获得。


                          IP属地:黑龙江13楼2016-06-23 09:39
                          回复
                            如何创建一个不带标题栏的 QMessageBox?
                            答:
                            可以使用下面的代码创建,不是使用 QMessageBox类的静态方法。
                            QMessageBox mgb ;
                            mgb.setWIndowFlags(Qt::FrameLessTopHint) ;
                            mgb.exec() ;
                            如何让一个对话框总在所有窗口的最前面显示?
                            答:
                            最简单的方法只需添加一句代码:
                            this->setWindowFlags(Qt::WindowStaysOnTopHint)


                            IP属地:黑龙江14楼2016-06-23 10:48
                            回复
                              第1行使用主窗口类的menuBar()函数得到主窗口的菜单栏指针,
                              再调用菜单栏对象的addMenu()函数,即可把一个新菜单menuFile插入到菜单栏中。
                              menuBar()函数的原型如下:
                              QMenuBar * QMainWindow::menuBar () const
                              如果菜单栏已经存在,它将返回指向该菜单栏的指针;
                              如果菜单栏还没有建立,它将创建并且返回一个空的主窗口的菜单栏。
                              小贴士:
                              menuBar()函数使得该菜单栏以程序中使用的主窗口作为自己的父窗口。
                              因此,如果你想在Mac应用程序中使得所有窗口都共用这个菜单栏的话,
                              请不要使用这种写法来创建菜单栏。
                              要达到这个目的,你可以创建一个没有父窗口的菜单栏,
                              这时我们的代码应该改为:
                              QMenuBar *menuBar = new QMenuBar(0);menuFile = menuBar->addMenu(tr("File"));
                              另外,
                              创建菜单栏还可以有另一种写法:
                              menuFile = new QMenu(tr("File"),this);
                              QMenuBar *menuBar = menuBar();
                              menuBar->addMenu(menuFile);
                              如下面代码所示,
                              addMenu()函数有多个原型,我们通常使用的是前两种。
                              QAction * QMenuBar::addMenu ( QMenu * menu )
                              QMenu * QMenuBar::addMenu ( const QString & title )
                              QMenu * QMenuBar::addMenu ( const QIcon & icon, const QString & title )


                              IP属地:黑龙江16楼2016-06-23 17:46
                              回复