Qt基本控件及三大布局

https://www.cnblogs.com/lsgxeva/p/7807029.html

来源: http://blog.csdn.net/a2604539133/article/details/73920696

Qt基本模块

一、Qt的三大布局

  1. QHBoxLayout: 
    1. 水平显示布局,所有在其上面摆放的控件只能水平排列下去;
  • QVBoxLayout: 
    1. 垂直显示布局,所有在其上面摆放的控件只能垂直排列下去;
  • QGridLayout 
    1. 格子显示布局,可以按照表格的形式显示布局;
  • 二、Qt的控件

    1. label:标签,可以显示文本信息,只读;
    2. pushbutton : 普通按钮;
    3. radiobutton : 单选按钮,多个单选按钮中只能选择一个,但是必须放入groupbox中,类似单选题;
    4. checkbox : 多选复选按钮,可以选择同时选择多个,类似多选题;
    5. lineedit : 单行文本编辑框,可以输入单行文本;
    6. textedit : 多行文本输入框,可以输入显示多行文本和图片;
    7. combobox : 下拉文本输入框,在输入框的最右边有个三角下拉按钮,可以选择输入,也可以手动输入;
    8. textbrower : 多行文本显示框,只读;
    9. groupbox : 可以在里面放入特点的东西,统一管理;
    10. slider : 模拟显示滑动条;
    11. spinbox : 数值显示滑动条;
    12. dateedit :
    13. timeedit :
    14. datetimeedit :
    15. lcdnumber :

    三、Qt的信号槽

    1. 在Qt中所有的对象(继承QObject类)都有connect函数,只要有这个函数就能建立信号槽(通过触发某个控件的信号函数,执行槽中相应的函数);(暂时这样理解,还是有点理解不全面的,之后学习到再来修改);
    2. 在Qt中信号槽中可以使用自带的函数,四个参数;也可以执行自定义的函数,三个参数;具体看下面test4的例子就明白了。
    #include <QtWidgets/QApplication>
    #include <QtCore/qdebug.h>
    #include <QtWidgets/qcompleter.h>
    #include <QtWidgets/qlineedit.h>
    #include <QtWidgets/qlabel.h> #include <QtWidgets/qcombobox.h> #include <QtWidgets/qcheckbox.h> #include <QtWidgets/qradiobutton.h> #include <QtWidgets/qtextedit.h> #include <QtWidgets/qtextbrowser.h> #include <QtWidgets/qgroupbox.h> #include <QtWidgets/qslider.h> #include <QtWidgets/qspinbox.h> #include <QtWidgets/qdatetimeedit.h> #include <QtWidgets/qtabwidget.h> #include <QtWidgets/qlcdnumber.h> #include <QtGui/qpixmap.h> #include <QtCore/qobject.h> #include <QtWidgets/qboxlayout.h> #include <QtWidgets/qpushbutton.h> #include "MyWidgetEvent.h" 

    void test() ;

    int main(int argc, char *argv[]) {

    QApplication a(argc, argv);
    
    test() ;
    
    <span class="hljs-keyword"><span class="hljs-keyword">return</span> a.exec();
    

    }

    void test(){

    }

    void test5ManyKongJian() {

    QWidget *nanWidget = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QWidget() ;
    QVBoxLayout *nanVLayout = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QVBoxLayout() ;
    
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试label控件
    */</span>
    QLabel *label=nullptr ;
    nanVLayout-&gt;addWidget( label = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLabel(<span class="hljs-string"><span class="hljs-string">"&lt;a href=www.baidu.com&gt;baidu&lt;/a&gt;"</span>) ) ;
    <span class="hljs-comment"><span class="hljs-comment">//QPixmap me("./me.png") ;</span>
    <span class="hljs-comment"><span class="hljs-comment">//label-&gt;setPixmap( me ) ;//问题:链接和图片重复了,怎么分开</span>
    label-&gt;setWordWrap( <span class="hljs-literal"><span class="hljs-keyword">true</span> ) ;
    label-&gt;adjustSize() ;
    nanVLayout-&gt;connect( label , &amp;QLabel::linkActivated , []( QString str){
        qDebug()&lt;&lt;str ;
    } ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试lineedit控件
    */</span>
    QLineEdit *lineEdit ;
    nanVLayout-&gt;addWidget( lineEdit = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLineEdit(<span class="hljs-string"><span class="hljs-string">"hello"</span>) ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试button控件
    */</span>
    QPushButton *button ;
    nanVLayout-&gt;addWidget( button = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton(<span class="hljs-string"><span class="hljs-string">"???"</span>) ) ;
    button-&gt;setStyleSheet(<span class="hljs-string"><span class="hljs-string">"QPushButton {font:bold 16px; color:red;padding:5px}"</span>) ;
    nanWidget-&gt;connect( button , &amp;QPushButton::clicked , [](<span class="hljs-keyword">bool flag){
        qDebug()&lt;&lt; <span class="hljs-string"><span class="hljs-string">"button"</span> ;
    }) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试radiobutton控件
    */</span>
    QRadioButton *radioButton ;
    nanVLayout-&gt;addWidget( radioButton = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QRadioButton(<span class="hljs-string"><span class="hljs-string">"qradiobutton"</span>) ) ;
    radioButton-&gt;setStyleSheet(<span class="hljs-string"><span class="hljs-string">"QRadioButton {font:bold  16px;color:blue;padding:5px}"</span>) ;
    radioButton-&gt;connect( radioButton , &amp;QRadioButton::clicked , [](<span class="hljs-keyword">bool flag){
        qDebug()&lt;&lt; flag ;
    }) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试ckeckbox控件
    */</span>
    QCheckBox *check ;
    nanVLayout-&gt;addWidget( check = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QCheckBox(<span class="hljs-string"><span class="hljs-string">"chekcbox"</span>) ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试combobox控件
    */</span>
    QComboBox *combobox ;
    nanVLayout-&gt;addWidget( combobox = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QComboBox() ) ;
    combobox-&gt;addItem(<span class="hljs-string"><span class="hljs-string">"select item1"</span>) ;
    combobox-&gt;addItem(<span class="hljs-string"><span class="hljs-string">"select item2"</span>) ;
    combobox-&gt;addItem(<span class="hljs-string"><span class="hljs-string">"...  ..."</span>) ;
    combobox-&gt;setEditable(<span class="hljs-literal"><span class="hljs-keyword">true</span>) ;
    lineEdit-&gt;setText(<span class="hljs-string"><span class="hljs-string">"start"</span>) ;
    combobox-&gt;connect( combobox , SIGNAL(activated(<span class="hljs-keyword"><span class="hljs-keyword">const</span> QString &amp;)) , lineEdit , SLOT(setText(<span class="hljs-keyword"><span class="hljs-keyword">const</span> QString &amp;)) ) ;<span class="hljs-comment"><span class="hljs-comment">//这里的下标要跟着显示</span>
    combobox-&gt;setCompleter( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QCompleter(combobox-&gt;model()) ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试textedit
    */</span>
    QTextEdit *textEdit ;
    nanVLayout-&gt;addWidget( textEdit = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QTextEdit(<span class="hljs-string"><span class="hljs-string">"textedit"</span>) ) ;
    textEdit-&gt;setText(<span class="hljs-string"><span class="hljs-string">"&lt;table border=2&gt; "</span>
                    <span class="hljs-string"><span class="hljs-string">"&lt;tr&gt;&lt;td&gt;good&lt;/td&gt;&lt;td&gt;good&lt;/td&gt;&lt;td&gt;good&lt;/td&gt;&lt;/tr&gt;"</span>
                    <span class="hljs-string"><span class="hljs-string">"&lt;tr&gt;&lt;td&gt;nice&lt;/td&gt;&lt;td&gt;nice&lt;/td&gt;&lt;td&gt;nice&lt;/td&gt;&lt;/tr&gt;"</span>
                    <span class="hljs-string"><span class="hljs-string">"&lt;/table&gt;"</span>
                    <span class="hljs-string"><span class="hljs-string">"&lt;img src=./me.png&gt;&lt;/img&gt;"</span>) ;
    textEdit-&gt;connect( textEdit , &amp;QTextEdit::textChanged,[&amp;](){
        <span class="hljs-comment"><span class="hljs-comment">//问题:textEdit-&gt;toPlainText() ;怎么才能获取到textEdit的实体,this-&gt;sender()</span>
        <span class="hljs-comment"><span class="hljs-comment">//QTextEdit _edit = (QTextEdit *)QObject::sender();</span>
        qDebug()&lt;&lt;textEdit-&gt;toPlainText() ;
    }) ;
    textEdit-&gt;setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded) ;
    textEdit-&gt;setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试groupbox控件
    */</span>
    QGroupBox *groupBox ;
    nanVLayout-&gt;addWidget( groupBox = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QGroupBox(<span class="hljs-string"><span class="hljs-string">"groupbox"</span>) ) ;
    QHBoxLayout *hLayout ;
    groupBox-&gt;setLayout( hLayout = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QHBoxLayout() ) ;
    hLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QRadioButton(<span class="hljs-string"><span class="hljs-string">"boy"</span>) ) ;
    hLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QRadioButton(<span class="hljs-string"><span class="hljs-string">"girl"</span>) ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试模拟显示条slider
    */</span>
    QSlider *slider ;
    nanVLayout-&gt;addWidget( slider = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QSlider() ) ;
    slider-&gt;setMinimum( <span class="hljs-number">-</span><span class="hljs-number"><span class="hljs-number">100</span> ) ;
    slider-&gt;setMaximum( <span class="hljs-number"><span class="hljs-number">100</span> ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试数字显示条
    */</span>
    QSpinBox *spinBox ;
    nanVLayout-&gt;addWidget( spinBox = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QSpinBox() ) ;
    spinBox-&gt;setMinimum( <span class="hljs-number">-</span><span class="hljs-number"><span class="hljs-number">100</span> ) ;
    spinBox-&gt;setMaximum( <span class="hljs-number"><span class="hljs-number">100</span> ) ;
    slider-&gt;connect( slider , SIGNAL(valueChanged(<span class="hljs-keyword">int)) , spinBox , SLOT(setValue(<span class="hljs-keyword">int)) ) ;
    spinBox-&gt;connect( spinBox , SIGNAL(valueChanged(<span class="hljs-keyword">int)) , slider , SLOT(setValue(<span class="hljs-keyword">int)) ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试时间设置
    */</span>
    nanVLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QDateTimeEdit() ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*
    **测试显示时间,只读
    */</span>
    QLCDNumber *number ;
    nanVLayout-&gt;addWidget( number = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLCDNumber() ) ;
    number-&gt;display(<span class="hljs-string"><span class="hljs-string">"1314"</span>) ;
    number-&gt;setMode(QLCDNumber::Hex) ;
    number-&gt;setSegmentStyle(QLCDNumber::Filled) ;
    
    nanWidget-&gt;setLayout( nanVLayout ) ;
    nanWidget-&gt;setWindowTitle(<span class="hljs-string"><span class="hljs-string">"control"</span>) ;
    nanWidget-&gt;show() ;
    

    }

    void test4GridAndHBox() {

    QWidget *nanWidget = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QWidget() ;
    QGridLayout *nanGridLayout = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QGridLayout() ;
    QHBoxLayout *nanHBoxLayout = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QHBoxLayout() ;
    
    nanGridLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLabel(<span class="hljs-string"><span class="hljs-string">"Username"</span>) , <span class="hljs-number"><span class="hljs-number">1</span> , <span class="hljs-number"><span class="hljs-number">1</span> ) ;
    nanGridLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLineEdit() , <span class="hljs-number"><span class="hljs-number">1</span> , <span class="hljs-number"><span class="hljs-number">2</span> ) ;
    nanGridLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLabel(<span class="hljs-string"><span class="hljs-string">"Username"</span>) , <span class="hljs-number"><span class="hljs-number">2</span> , <span class="hljs-number"><span class="hljs-number">1</span> ) ;
    nanGridLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLineEdit() , <span class="hljs-number"><span class="hljs-number">2</span> , <span class="hljs-number"><span class="hljs-number">2</span> ) ;
    nanGridLayout-&gt;addLayout( nanHBoxLayout , <span class="hljs-number"><span class="hljs-number">3</span> , <span class="hljs-number"><span class="hljs-number">2</span> ) ;
    
    nanHBoxLayout-&gt;addStretch(<span class="hljs-number"><span class="hljs-number">1</span>) ;
    nanHBoxLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton(<span class="hljs-string"><span class="hljs-string">"Login"</span>) , <span class="hljs-number"><span class="hljs-number">1</span> ) ;
    
    nanWidget-&gt;setLayout( nanGridLayout ) ;
    nanWidget-&gt;show() ;
    

    }

    void test3GridLayout() {

    QWidget *nanWidget = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QWidget() ;
    QGridLayout *nanLayout = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QGridLayout() ;
    QPushButton *nanButton = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton() ;
    QLineEdit *nanLineEdit = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLineEdit() ;
    
    nanLayout-&gt;addWidget( nanLineEdit , <span class="hljs-number"><span class="hljs-number">1</span> , <span class="hljs-number"><span class="hljs-number">1</span> , <span class="hljs-number"><span class="hljs-number">1</span> , <span class="hljs-number"><span class="hljs-number">2</span> ) ;
    nanLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton , <span class="hljs-number"><span class="hljs-number">1</span>, <span class="hljs-number"><span class="hljs-number">3</span> ) ;
    nanLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLineEdit , <span class="hljs-number"><span class="hljs-number">2</span>, <span class="hljs-number"><span class="hljs-number">1</span> , <span class="hljs-number"><span class="hljs-number">2</span> , <span class="hljs-number"><span class="hljs-number">1</span>  ) ; 
    nanLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton , <span class="hljs-number"><span class="hljs-number">2</span>, <span class="hljs-number"><span class="hljs-number">2</span> ) ;
    nanLayout-&gt;addWidget( <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton , <span class="hljs-number"><span class="hljs-number">2</span>, <span class="hljs-number"><span class="hljs-number">3</span> ) ;
    nanLayout-&gt;addWidget( nanButton , <span class="hljs-number"><span class="hljs-number">3</span> , <span class="hljs-number"><span class="hljs-number">3</span> ) ;
    nanLayout-&gt;setColumnStretch( <span class="hljs-number"><span class="hljs-number">1</span> , <span class="hljs-number"><span class="hljs-number">1</span> ) ;
    nanLayout-&gt;setColumnStretch( <span class="hljs-number"><span class="hljs-number">2</span> , <span class="hljs-number"><span class="hljs-number">1</span> ) ;<span class="hljs-comment"><span class="hljs-comment">/*设置每列的比重*/</span>
    nanLayout-&gt;setColumnStretch( <span class="hljs-number"><span class="hljs-number">3</span> , <span class="hljs-number"><span class="hljs-number">1</span> ) ;
    
    nanWidget-&gt;setLayout( nanLayout ) ;
    nanWidget-&gt;show() ;
    

    }

    void test2HBoxLayout() {

    QWidget *nanQWidget = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QWidget() ;
    
    QLineEdit *nanQLineEdit = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLineEdit() ;
    
    QHBoxLayout *nanHLayout = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QHBoxLayout() ;
    nanHLayout-&gt;addWidget( nanQLineEdit , <span class="hljs-number"><span class="hljs-number">1</span> ) ;
    <span class="hljs-comment"><span class="hljs-comment">//添加,两个控件之间的距离addspaceing,两个控件在layout中的比重addstretch</span>
    
    nanQWidget-&gt;setLayout( nanHLayout ) ;
    nanQWidget-&gt;show() ;
    

    }

    void test1(){

    QWidget *w  = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QWidget ;
    QVBoxLayout *vLayout = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QVBoxLayout( ) ;
    QPushButton *nanButton ;
    QLineEdit *nanLineEdit ;
    QLabel *nanLabel ;
    QString content(<span class="hljs-string"><span class="hljs-string">"null"</span>) ;
    QCompleter nanQCompleter( QStringList()&lt;&lt;<span class="hljs-string"><span class="hljs-string">"nich"</span>&lt;&lt;<span class="hljs-string"><span class="hljs-string">"chen"</span>&lt;&lt;<span class="hljs-string"><span class="hljs-string">"good"</span>) ;
    
    vLayout-&gt;addWidget( nanLineEdit = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLineEdit()  ) ;
    vLayout-&gt;addWidget( nanButton = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton(<span class="hljs-string"><span class="hljs-string">"right"</span>) ) ;
    nanQCompleter.setFilterMode( Qt::MatchFlag::MatchContains ) ;
    nanLineEdit-&gt;setCompleter( &amp;nanQCompleter ) ;
    nanLineEdit-&gt;setPlaceholderText( <span class="hljs-string"><span class="hljs-string">"Please input your name"</span> ) ;
    vLayout-&gt;addWidget(  nanLabel = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLabel() ) ;
    nanLabel-&gt;setText( content ) ;
    w-&gt;connect( nanButton , &amp;QPushButton::clicked , [&amp;](){
        nanLabel-&gt;setText( nanLineEdit-&gt;text() ) ;
    } ) ;
    
    w-&gt;setLayout( vLayout) ;
    w-&gt;show() ;
    

    }

    一、dialog、widget、mainwindow的区别

    1)、dialog有exec函数,如果是dialog窗口,后边的窗口时不可选的; 
    2)、widget和dialog都有show函数,如果通过这个函数显示这两种类型的窗口,则两个窗口都是可选的; 
    3)、widget主要是在上面放置布局和控件; 
    4)、mainwindow可以显示菜单,工具栏,状态栏、托盘等功能。

    二、dialog窗口

    这个dialog窗口只是为了给人们提供更好的可视化操作,但是对于程序员而言,这个操作并不是立刻执行的;而是当在窗口选择关闭后,才将选择的结果返回给后台,后台才可以根据选择的结果进行相应的操作。

    #include "mydialog.h"
    

    mydialog::mydialog(QDialog *parent):QDialog(parent) {

    QPushButton *button = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QPushButton( <span class="hljs-string"><span class="hljs-string">"button"</span> , <span class="hljs-keyword"><span class="hljs-keyword">this</span> ) ;
    connect( button , SIGNAL(clicked()) , <span class="hljs-keyword"><span class="hljs-keyword">this</span> , SLOT(slotButtonClick()) ) ;
    

    }

    void mydialog::slotButtonClick() {

    #if 0
    /dialog和widget的区别,exec和show的区别而已/
    QDialog *dlg = new QDialog ;
    QPushButton *button = new QPushButton(“close” , dlg ) ;
    connect( button , SIGNAL(clicked()) , dlg , SLOT(reject()) ) ;
    int ret = dlg->exec( ) ;
    //通过exec显示出来的窗口称为,模块对话框
    // 在模块对话框中,exec有自己的消息循环,并且把app的消息循环接管了
    // 如果Dialog是通过exec来显示,那么可以通过accept或者reject来关闭窗口
    // 如果Dialog是通过show来显示,那么可以通过close来关闭窗口,这个和QWidget一样的

    <span class="hljs-comment"><span class="hljs-comment">// 有许多特殊的dailog:文件选择,MessageBox,颜色选择,字体选择,打印预览,打印</span>
    <span class="hljs-keyword"><span class="hljs-keyword">if</span>( ret == QDialog::Accepted ) 
        qDebug()&lt;&lt;<span class="hljs-string"><span class="hljs-string">"accepted"</span> ;
    <span class="hljs-keyword"><span class="hljs-keyword">else</span> <span class="hljs-keyword"><span class="hljs-keyword">if</span>( ret== QDialog::Rejected ) 
        qDebug()&lt;&lt;<span class="hljs-string"><span class="hljs-string">"rejected"</span> ;
    

    #endif
    #if 0
    /文件选择:这个窗口可以选择保存文件的名称,然后将路径+名称返回,我们就可以根据返回路径名来保存文件。/
    QString strFilename = QFileDialog::getSaveFileName(NULL,
    “Select file for save”,
    _strDir,
    “pic file (*.png .jpg)");
    #endif
    #if 0
    /文件选择:选择要打开的文件名(绝对路劲);我们就可以根据这个文件路径来打开相应的文件/
    QString strFilename = QFileDialog::getOpenFileName(NULL,
    “Select file for open”,
    _strDir,
    "pic file (.png *.jpg)”);
    #endif
    #if 0
    QString strFilename = QFileDialog::getExistingDirectory();

    <span class="hljs-keyword"><span class="hljs-keyword">if</span>(strFilename.isEmpty())
    {
        qDebug() &lt;&lt; <span class="hljs-string"><span class="hljs-string">"select none"</span>;
        <span class="hljs-keyword"><span class="hljs-keyword">return</span>;
    }
    
    qDebug() &lt;&lt; strFilename;
    <span class="hljs-function">QFileInfo <span class="hljs-title">fileInfo</span>(<span class="hljs-params">strFilename</span>)</span>;
    _strDir = fileInfo.filePath();
    qDebug() &lt;&lt; _strDir;
    

    #endif
    //do something for io … …
    //上面的选择将绝对路径名都给拿下来了,如果要进行保存,不是很容易吗!
    QPixmap pixmap(this->size()) ;
    QPainter painter(&pixmap) ;
    this->render( &painter ) ;
    pixmap.save(strFilename) ;
    #if 0
    /颜色选择对话框:可以选择相应的颜色;然后将选择的颜色返回,这样我们就可以操作了/
    QColorDialog colorDia ;
    colorDia.exec() ;
    QColor c = colorDia.selectedColor() ;
    #endif
    #if 0
    /字体选择对话框:可以选择字体;然后将选择的字体信息返回,我们同样可以用这些信息来设置相应的值/
    QFontDialog fontDia ;
    fontDia.exec() ;
    QFont font = fontDia.selectedFont() ;
    #endif
    #if 0
    /这个也是弹窗对话框,不过只是简单的选择以下枚举中的值,可以尝试下效果/
    int ret = QMessageBox::question(this, “???”, “realy do …”,
    QMessageBox::Yes| QMessageBox::No|
    QMessageBox::YesAll| QMessageBox::NoAll);
    if(ret == QMessageBox::Yes)
    {
    qDebug() << “user select yes”;
    }
    if(ret == QMessageBox::No)
    {
    qDebug() << “user select no”;
    }
    #endif
    }

    void mydialog::paintEvent( QPaintEvent *ev ) {
    }

    mydialog::~mydialog(void) { }

    三、widget窗口

    前面已经介绍过很多继承这个窗口的控件了,这里就不再累述。

    四、mainWindow窗口

    这个也是给人们提供更好的可视化操作; 
    一个正常window软件呈现给客户的可视化界面; 
    包括:menu菜单、tool工具栏、status状态栏、电脑显示屏右下脚的托盘等。

    #include "MyWindow.h"
    

    MyWindow::MyWindow(QMainWindow *parent):QMainWindow( parent ) {

    <span class="hljs-comment"><span class="hljs-comment">/*menuBar菜单栏,菜单menu*/</span>
    QMenuBar  *menuBar = <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;menuBar() ;
    _menu = menuBar-&gt;addMenu( <span class="hljs-string"><span class="hljs-string">"&amp;File"</span> ) ;
    QMenu *edit = menuBar-&gt;addMenu( <span class="hljs-string"><span class="hljs-string">"&amp;Edit"</span> ) ;
    
    <span class="hljs-comment"><span class="hljs-comment">/*menu菜单中的选项action*/</span>
    QAction *openAction = _menu-&gt;addAction( <span class="hljs-string"><span class="hljs-string">"&amp;Open"</span>
        , <span class="hljs-keyword"><span class="hljs-keyword">this</span> , SLOT(slotOpen()) , QKeySequence::Open  ) ;
    QAction *saveAction = _menu-&gt;addAction( <span class="hljs-string"><span class="hljs-string">"&amp;Save"</span>
        , <span class="hljs-keyword"><span class="hljs-keyword">this</span> , SLOT(slotOpen()) , QKeySequence::Save  ) ;
    _menu-&gt;addSeparator() ;<span class="hljs-comment"><span class="hljs-comment">//添加分界线</span>
    QAction *closeAction = _menu-&gt;addAction( <span class="hljs-string"><span class="hljs-string">"&amp;Exit"</span>
        , <span class="hljs-keyword"><span class="hljs-keyword">this</span> , SLOT(close()) , QKeySequence::Close  ) ;
    
    <span class="hljs-comment"><span class="hljs-comment">/*toolBar工具栏*/</span>
    QToolBar *toolBar = <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;addToolBar( <span class="hljs-string"><span class="hljs-string">"mimi"</span> ) ;
    toolBar-&gt;addAction( openAction ) ;
    toolBar-&gt;addAction( saveAction ) ;
    toolBar-&gt;addAction( closeAction ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*statusBar状态栏*/</span>
    QStatusBar *statusBar = <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;statusBar() ;
    QLabel *label ;
    statusBar-&gt;addWidget( label = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QLabel(<span class="hljs-string"><span class="hljs-string">"Ok"</span>) ) ;
    label-&gt;setText( <span class="hljs-string"><span class="hljs-string">"&lt;font color=blue&gt;XXXXX... ...&lt;/font&gt;"</span> ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*上面的三种栏介绍完之后,剩下的窗口区域就是CentralWidget
    **如果将widget直接add到mainwindow这个窗口的话,
    **toolbar是会跟添加进来的widget重叠的*/</span>
    MyView *view = <span class="hljs-keyword"><span class="hljs-keyword">new</span> MyView ;
    <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;setCentralWidget( view ) ;
    <span class="hljs-comment"><span class="hljs-comment">/*最后就是window系统右下脚的托盘:system tray icon*/</span>
    QSystemTrayIcon *icon = <span class="hljs-keyword"><span class="hljs-keyword">new</span> QSystemTrayIcon ;
    icon-&gt;setIcon( QIcon(<span class="hljs-string"><span class="hljs-string">"./1.png"</span>) ) ;<span class="hljs-comment"><span class="hljs-comment">//图标</span>
    icon-&gt;setToolTip( <span class="hljs-string"><span class="hljs-string">"luck dog"</span> ) ;<span class="hljs-comment"><span class="hljs-comment">//鼠标滑过提示文字</span>
    icon-&gt;show() ;<span class="hljs-comment"><span class="hljs-comment">//展示在右下角</span>
    icon-&gt;setContextMenu( _menu ) ;<span class="hljs-comment"><span class="hljs-comment">//右击出现的菜单</span>
    <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;connect( icon , SIGNAL( slotActivated(QSystemTrayIcon::ActivationReason) ) 
        , <span class="hljs-keyword"><span class="hljs-keyword">this</span> , SLOT(slotActivated(QSystemTrayIcon::QSystemTrayIcon::ActivationReason)) ) ;
    <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;installEventFilter(<span class="hljs-keyword"><span class="hljs-keyword">this</span>);
    

    }

    void MyWindow::slotActivated(QSystemTrayIcon::ActivationReason reason){

    <span class="hljs-comment"><span class="hljs-comment">/*这个没成功*/</span>
    <span class="hljs-keyword"><span class="hljs-keyword">if</span>( reason==QSystemTrayIcon::Trigger ) {
        <span class="hljs-keyword"><span class="hljs-keyword">if</span>( <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;isHidden() ) 
            <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;show() ;
        <span class="hljs-keyword"><span class="hljs-keyword">else</span>
            <span class="hljs-keyword"><span class="hljs-keyword">this</span>-&gt;hide() ;
    }
    

    }

    bool MyWindow::eventFilter(QObject *o, QEvent e)
    {
    /实现什么功能呢?/
    if(o == (QObject
    )this && e->type() == QEvent::Close)
    {
    return true;
    }

    <span class="hljs-keyword"><span class="hljs-keyword">return</span> QMainWindow::eventFilter(o, e);
    

    }

    void MyWindow::slotOpen() {

    QString fileName = QFileDialog::getOpenFileName() ;
    qDebug()&lt;&lt;fileName ;
    <span class="hljs-comment"><span class="hljs-comment">/*将打开的文件中的内容显示在窗口上... ...*/</span>
    

    }
    bool MyWindow::event(QEvent *ev)
    {
    qDebug() << ev;
    if(ev->type() == QEvent::Close) {
    return false;
    }
    /怎么弄才能实现窗口关闭,托盘还在?/
    return QMainWindow::event(ev);
    }

    void MyWindow::paintEvent( QPaintEvent * ) {

    <span class="hljs-function">QPainter <span class="hljs-title">painter</span>(</span><span class="hljs-keyword"><span class="hljs-function"><span class="hljs-params"><span class="hljs-keyword">this</span></span>) </span>;
    painter.drawPixmap( QPoint(<span class="hljs-number"><span class="hljs-number">0</span>,<span class="hljs-number"><span class="hljs-number">0</span>) , QPixmap(<span class="hljs-string"><span class="hljs-string">"./1.png"</span>) ) ;
    

    }

    void MyWindow::mousePressEvent( QMouseEvent *ev ) {

    <span class="hljs-keyword"><span class="hljs-keyword">if</span>( ev-&gt;button() == Qt::RightButton ) {
        _menu-&gt;exec( QCursor::pos() ) ;
    }
    

    }

    MyWindow::~MyWindow(void) { }

    一、qDebug()函数

    1. qDebug()函数可以直接输出调试错误信息,方便程序员调试信息,查找错误;
    2. 例子:qDebug()<<"error"<<endl;

    二、QDebug类

    1. 这个函数可以收集错误信息,通过QTextStream这个类(之前在写文件的时候,用过这个类,查看了下函数的作用,果真和自己想的一样);
    2. QTextStream类,指定一个Qfile*或是QString*作为参数,重载了<<操作符,将对象(QTextStream<<。。)收集到的数据都保存入,相应的参数(这个参数由构造函数决定)中,方便统一管理。例如:在构造时如果指定了文件指针,就直接保存如文件;在构造时如果指定了string,就直接保存如string中… …
    3. 总结:这个错误类不是用来输出信息的(当然简介使用错误函数也是可以输出信息),更重要的是用来收集错误信息,方便统一管理,保存,查看的。
        QString *str ;
        QDebug q( str = new QString("object") ) ;
        q<<"nice";
        qDebug()<< *str ;
    
    发布了42 篇原创文章 · 获赞 148 · 访问量 41万+

    猜你喜欢

    转载自blog.csdn.net/baidu_37503452/article/details/104169838