精华内容
下载资源
问答
  • Qt下拉列表

    2014-03-15 21:33:42
    qt中的一个简单例子,你可以慢慢看,也可以现在看,有时间就看看吧
  • 就是下拉列表默认值显示的是10个,现在就是想add一个或多个之后,再次点开 这个弹窗时就显示加了多少个的 下拉列表。 ![图片说明](https://img-ask.csdn.net/upload/201904/26/1556263873_722935.png) 我是将...
  • Qt自制下拉列表

    2017-08-02 23:08:34
    我想自制一个下来列表,但是遇到一个难题,就是点击其他地方的时候收起下来列表。求给个思路
  • python+pyqt实现:将数据从excel表中导出到qt下拉列表框(QComboBox)中,手动点击“导入数据”即将excel表中的数据加载到qt下拉列表
  • Qt自制像下拉列表那样点一下有东西出来点一下其他地方出来的东西就隐藏起来要怎么写,给我个大概思路
  • Qt CombBox下拉列表自定义(使用样式表),参考ReadMe.txt文档做适当的修改,更容易熟悉样式表使用,希望对你有用。
  • QComboBox是QT GUI中的下拉列表框。 [cpp] view plaincopy class Q_GUI_EXPORT QComboBox : public QWidget  {   Q_OBJECT  常用方法和属性: (1)addItems void add...

    QComboBox是QT GUI中的下拉列表框。

    1. class Q_GUI_EXPORT QComboBox : public QWidget  
    2. {  
    3.     Q_OBJECT  


    常用方法和属性:

    (1)addItems

    void addItems ( const QStringList & texts )

    在QComboBox的最后添加一项。

    (2)count

    int count () const

    返回列表项总数。

    (3)currentIndex

    int currentIndex () const

    当前显示的列表项序号。

    (4)currentText

    QString currentText () const

    返回当前显示的文本。

    (5)insertItem

    void insertItem ( int index, const QString & text, const QVariant & userData = QVariant() )

    void insertItem ( int index, const QIcon & icon, const QString & text, const QVariant & userData = QVariant() )

    void insertItems ( int index, const QStringList & list )

    插入一项或多项至序号index处。

    (6)insertSeparator

    void insertSeparator ( int index )

    在序号为index的项前插入分隔线


    (7)setItemText

    void setItemText ( int index, const QString & text )

    改变序号为index项的文本。


    示例:

    Window.h



    1. #ifndef __WINDOW_H__  
    2. #define __WINDOW_H__  
    3.   
    4. #include <QMainWindow>  
    5. #include <QPushButton>  
    6. #include <QLineEdit>  
    7. #include <QLayout>  
    8. #include <QLabel>  
    9. #include <QComboBox>  
    10. #include <QMessageBox>  
    11. #include <QDialog>  
    12.   
    13.   
    14. class Window : public QMainWindow  
    15. {  
    16.     Q_OBJECT  
    17.   
    18. public:  
    19.     Window(QWidget *parent = NULL):QMainWindow(parent)  
    20.     {  
    21.         QGridLayout *gridLayout = new QGridLayout;  
    22.         gridLayout->setColumnStretch(0, 1);  
    23.         gridLayout->setColumnStretch(1, 3);  
    24.   
    25.         gridLayout->setMargin(10);  
    26.   
    27.         QLabel *lbl_caption = new QLabel(QWidget::tr("Sex:"));  
    28.         cbo_sex = new QComboBox();  
    29.   
    30.         cbo_sex->addItem(QWidget::tr("male"));  
    31.         cbo_sex->addItem(QWidget::tr("female"));  
    32.         cbo_sex->insertItem(2, tr("Insert item"));  
    33.         cbo_sex->insertSeparator(2);  
    34.   
    35.         gridLayout->addWidget(lbl_caption, 0, 0);  
    36.         gridLayout->addWidget(cbo_sex, 0, 1);  
    37.   
    38.         QHBoxLayout *bomLayout = new QHBoxLayout;  
    39.         QPushButton *btn = new QPushButton(QWidget::tr("Select"));  
    40.         bomLayout->addStretch();  
    41.         bomLayout->addWidget(btn);  
    42.         bomLayout->addStretch();  
    43.   
    44.         QVBoxLayout *mainLayout = new QVBoxLayout;  
    45.         mainLayout->addLayout(gridLayout);  
    46.         mainLayout->addLayout(bomLayout);  
    47.           
    48.         QWidget *mainWidget = new QWidget;  
    49.         mainWidget->setLayout(mainLayout);  
    50.   
    51.         setCentralWidget(mainWidget);  
    52.   
    53.         connect(cbo_sex, SIGNAL(currentIndexChanged(const QString &)), this, SLOT(on_sel_sex(const QString &)));  
    54.         connect(btn, SIGNAL(clicked()), this, SLOT(on_click_sel()));  
    55.     }  
    56.   
    57. private:  
    58.     QComboBox *cbo_sex;  
    59.   
    60. private slots:  
    61.     void on_sel_sex(const QString &text)  
    62.     {  
    63.         QString str;  
    64.         str = "You select " + text;  
    65.         QMessageBox::information(this, tr("Info"), str);  
    66.     }  
    67.   
    68.     void on_click_sel()  
    69.     {  
    70.         QString str;  
    71.         str = "You select " + cbo_sex->currentText();  
    72.         QMessageBox::information(this, tr("Info"), str);  
    73.     }  
    74.   
    75. };  
    76.   
    77.   
    78. #endif  


    main.cpp

    1. #include <QApplication>  
    2. #include <QDialog>  
    3. #include "Window.h"  
    4.   
    5.   
    6.   
    7. int main(int argc, char *argv[])  
    8. {  
    9.     QApplication a(argc, argv);  
    10.     Window *mainWindow = new Window;  
    11.   
    12.   
    13.   
    14.     mainWindow->resize(200, 100);  
    15.     mainWindow->setWindowTitle(QWidget::tr("Qt Test"));  
    16.     mainWindow->show();  
    17.   
    18.     return a.exec();  
    19. }  


    编译运行,界面如下:



    展开全文
  • QCombox是一个集按钮与下拉选项于一体的控件,因此又被称为下拉列表框。 其主要方法与信号如下 实例 import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * class ...

    QCombox

    QCombox是一个集按钮与下拉选项于一体的控件,因此又被称为下拉列表框。
    其主要方法与信号如下
    在这里插入图片描述
    实例

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    class ComboxDemo(QWidget):
        def __init__(self,parent=None):
            super(ComboxDemo, self).__init__(parent)
            self.setWindowTitle("Combox Example")
            self.resize(300,90)
            layout=QVBoxLayout()
            self.lbl = QLabel("")#建立一个空标签
    
            self.cb=QComboBox()
            self.cb.addItem('C')
            self.cb.addItem('C++')#单个添加
            self.cb.addItems(['Java','Python','C#'])#元组添加
            self.cb.currentIndexChanged.connect(self.selectionchange)#单击选择框仅当所选内容前后有变化时触发此信号
            layout.addWidget(self.cb)
            layout.addWidget(self.lbl)
            self.setLayout(layout)
    
        def selectionchange(self,i):#i表示传递过来的转中选选项的序号
            self.lbl.setText(self.cb.currentText())#将选项文本传递给标签
            print("Items in the list are :")
            for count in range(self.cb.count()):
                 print('item'+str(count)+ '='+self.cb.itemText(count))
                 print("Current index" ,i,"selection changed",self.cb.currentText())#currentText 当前文本,即选中的文本
    
    if __name__=='__main__':
        app = QApplication(sys.argv)
        comboxDemo = ComboxDemo()
        comboxDemo.show()
        sys.exit(app.exec_())
    

    在这里插入图片描述

    QSpinBox(QDoubleSpinBox)

    QSpinBox/QDoubleSpinBox是一个计数器器件,区别在于前者处理整数,后者处理浮点数,允许用户选择一个值(或者输入)通过单击,上下按钮(或键盘上下键)来增加或减少当前值默认情况下,QSpinBox取值范围)0-99,步长为1,QDoubleSpinBox精度为2位,可通过setDecimals改变
    常用方法
    在这里插入图片描述
    当单击按钮时,该控件便发射一个valueChanged信号,可以通过value()函数获得该值

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    class SpinboxDemo(QWidget):
        def __init__(self,parent=None):
            super(SpinboxDemo, self).__init__(parent)
            self.setWindowTitle("SpinboxDemo Example")
            self.resize(300,100)
            layout=QVBoxLayout()
    
            self.lbl = QLabel("current value")#建立一个标签,显示当前值
            self.lbl.setAlignment(Qt.AlignCenter)#居中
            layout.addWidget(self.lbl)
            self.sp=QSpinBox()
            layout.addWidget(self.sp)
            self.sp.valueChanged.connect(self.valuechange)#值改变
    
            self.setLayout(layout)
    
        def valuechange(self):
            self.lbl.setText("current value:"+str(self.sp.value()))#将计数器当前值设置到标签文本中
    
    if __name__=='__main__':
        app = QApplication(sys.argv)
        SpinboxDemo = SpinboxDemo()
        SpinboxDemo.show()
        sys.exit(app.exec_())
    

    在这里插入图片描述

    QSlider

    QSlider是一个水平或竖直的滑动条,用户可沿某一方向移动滑块,并将滑块位置 转移成一个合法的整数值。
    下面是其基本方法在这里插入图片描述信号
    在这里插入图片描述
    设置水平与竖直方向直接在构造函数中设置即可

    self.sp=QSlider(Qt.Horizontal)
    self.sp=QSlider(Qt.Vertical)
    

    实例

    import sys
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    
    class SliderDemo(QWidget):
        def __init__(self,parent=None):
            super(SliderDemo, self).__init__(parent)
            self.setWindowTitle("SliderDemo Example")
            self.resize(300,100)
            layout=QVBoxLayout()
    
            self.lbl = QLabel("hello pyqt")#建立一个标签,显示当前值
            self.lbl.setAlignment(Qt.AlignCenter)#居中
            layout.addWidget(self.lbl)
    
            self.s1=QSlider(Qt.Horizontal)#水平
            self.s1.setMinimum(10)#设置最小值
            self.s1.setMaximum(50)#设置最大值
            self.s1.setSingleStep(2)#设置步长
            self.s1.setValue(20)#设置当前值
            self.s1.setTickPosition(QSlider.TicksBelow)#设置坐标位置,将其显示在下方
            self.s1.setTickInterval(10)#设置刻度间隔
            layout.addWidget(self.s1)
    
            self.s1.valueChanged.connect(self.valuechange)#检测滑块位置改变
            self.setLayout(layout)
    
            self.setLayout(layout)
    
        def valuechange(self):
            print("current value:"+str(self.s1.value()))#将当前值输出
            size = self.s1.value()
            self.lbl.setFont(QFont("Arial",size))#设置字体和字号
    
    if __name__=='__main__':
        app = QApplication(sys.argv)
        SliderDemo = SliderDemo()
        SliderDemo.show()
        sys.exit(app.exec_())
    

    在这里插入图片描述

    展开全文
  • Qt QComboBox 下拉列表文字居中显示

    千次阅读 2018-04-19 18:26:44
    QComboBox *combox = new QComboBox;static_cast&lt;QStandardItemModel*&gt;(combox-&gt;view()-&gt;model())-&...setTextAlignment(Qt::AlignCenter);每次只能修改一个item的文字位置...

    QComboBox *combox = new QComboBox;

    static_cast<QStandardItemModel*>(combox->view()->model())->item(positon)->setTextAlignment(Qt::AlignCenter);


    每次只能修改一个item的文字位置

    展开全文
  • Qt自制像下拉列表那样点一下有东西出来点一下其他地方出来的东西就隐藏起来要怎么写,给我个大概思路
  • Qt之实现下拉列表菜单

    万次阅读 2017-11-16 12:21:37
     在QGraphicsItem下使用QListWidget实现下拉列表的功能,并显示所有的选项,便于浏览和查询数据。 二、详解 1、部分代码 (1)clusterlistwidget.h [html] view plain copy ...

    一、简介

          在QGraphicsItem下使用QListWidget实现下拉列表的功能,并显示所有的选项,便于浏览和查询数据。

    二、详解

    1、部分代码

    (1)clusterlistwidget.h

    [html] view plain copy
    1. #ifndef CLUSTERLISTWIDGET_H  
    2. #define CLUSTERLISTWIDGET_H  
    3. #include <QWidget>  
    4. #include <QtGui>  
    5. #include "custombtn.h"  
    6. #include "pagenumbercontrol.h"  
    7. class SearchLineEdit;  
    8. enum TYPE{cluster=0,host,vm};  
    9. class ClusterListWidget : public QWidget  
    10. {  
    11.     Q_OBJECT  
    12. public:  
    13.     explicit ClusterListWidget(TYPE type = cluster,QWidget *parent = 0);  
    14.   
    15.     void setListWidget();  
    16.     void setTitle(QString title);  
    17.   
    18.     void listInit();  
    19. signals:  
    20.   
    21. public slots:  
    22.     void textChange(QString text);  
    23.     void pageChange(int currentnumber);  
    24.     void editClicked();  
    25.     void btnClicked();  
    26.     void itemEnteredSlot(QListWidgetItem * i);  
    27.     void itemClickedSlot(QListWidgetItem * i);  
    28.   
    29.     void rowChanged(int row);  
    30. protected:  
    31.     //bool eventFilter(QObject * obj, QEvent *e);  
    32.     void paintEvent(QPaintEvent *e);  
    33.     void showEvent(QShowEvent *e);  
    34.     void keyPressEvent(QKeyEvent *e);  
    35. private:  
    36.     void setImgs(const QString &normal,const QString &abnormal,const QString &error);  
    37.     void setVmImgs(const QString &linux_normal,const QString &linux_abnormal,const QString &linux_error,const QString &linux_off,  
    38.                    const QString &windows_normal,const QString &windows_abnormal,const QString &windows_error,const QString &windows_off);  
    39. private:  
    40.     //QString _icon;  
    41.     QPixmap backGroundPix;  
    42.     QStringList NameList;  
    43.     QStringList _searchList;  
    44.     QStringList _list;  
    45.     QLabel *lb1;  
    46.     QLabel *lb2;  
    47.     PageNumberControl *_page;  
    48.   
    49.     int _maxNum;  
    50.     int _currentNum;  
    51.     int _searchNUm;  
    52.     SearchLineEdit *_searchLineEdit;  
    53.     QListWidget * _cluster;  
    54.     QPushButton *_btn;  
    55.     int _n;//记录键盘 上下见  
    56.   
    57.     int _x;  
    58.     int _y;  
    59.     QPixmap _enterPixmap;  
    60.     bool _enter;  
    61.   
    62.     QString _title;  
    63.     QString _normal;  
    64.     QString _abnormal;  
    65.     QString __error;  
    66.   
    67.     TYPE _type;  
    68.   
    69.     QString _linux_normal;  
    70.     QString _linux_abnormal;  
    71.     QString _linux_error;  
    72.     QString _linux_off;  
    73.     QString _windows_normal;  
    74.     QString _windows_abnormal;  
    75.     QString _windows_error;  
    76.     QString _windows_off;  
    77. };  
    78. class SearchLineEdit : public QLineEdit  
    79. {  
    80.     Q_OBJECT  
    81.  public:  
    82.     explicit SearchLineEdit(QWidget *parent = 0);  
    83.  signals:  
    84.     void pressed();  
    85.  protected:  
    86.     void focusInEvent(QFocusEvent *e);  
    87.     void focusOutEvent(QFocusEvent *e);  
    88.  private:  
    89. };  
    90. #endif // CLUSTERLISTWIDGET_H  
    (2)clusterlistwidget.cpp
    [html] view plain copy
    1. #include "clusterlistwidget.h"  
    2.   
    3. ClusterListWidget::ClusterListWidget(TYPE type,QWidget *parent) :  
    4.     QWidget(parent,Qt::FramelessWindowHint)  
    5.   ,_maxNum(0)  
    6.   ,_searchNUm(0)  
    7.   ,_n(-1)  
    8.   ,_x(0)  
    9.   ,_y(0)  
    10.   ,_enter(false)  
    11. {  
    12.     NameList<<"a"<<"b"<<"c"<<"d"<<"e"<<"a"<<"b"<<"c"<<"d"<<"e"  
    13.              <<"a"<<"b"<<"c"<<"d"<<"e"<<"a"<<"b"<<"c"<<"d"<<"e"  
    14.                <<"a"<<"b"<<"c"<<"d"<<"e"<<"a"<<"b"<<"c"<<"d"<<"e"  
    15.                  <<"a"<<"b"<<"c"<<"d"<<"e"<<"a"<<"b"<<"c"<<"d"<<"e"<<"hjhjha";  
    16.     backGroundPix = QPixmap(":/images/handleMenu_bg.png");  
    17.     resize(backGroundPix.width(),  backGroundPix.height());  
    18.     qDebug()<<backGroundPix.width()<<backGroundPix.height();  
    19.     QPalette pal = palette();  
    20.     pal.setColor(QPalette::Background, QColor(0xFF,0xFF,0xFF,0x00));  
    21.     setPalette(pal);  
    22.     _listNameList;  
    23.     _type = type;  
    24.     lb1 = new QLabel(this);  
    25.     lb1->setPixmap(QPixmap(":/images/handleMenu_allClusters.png"));  
    26.     lb1->move(10,12);  
    27.   
    28.     lb2 = new QLabel(this);  
    29.     lb2->move(33,12);  
    30.     lb2->setStyleSheet("color:#b4e5fd");  
    31.   
    32.     _page = new PageNumberControl(this);  
    33.     _page->setCluster(true);  
    34.     _maxNum = (_list.count() - 1) / 16 +1;  
    35.     _currentNum = 1;  
    36.     _page->setTotalPage(_maxNum);  
    37.     _page->move(145,12);  
    38.   
    39.     _searchLineEdit = new SearchLineEdit(this);  
    40. //    _searchLineEdit->setImgs(":/images/handleMenu_searchInput.png",":/images/handleMenu_searchInput_click.png",  
    41. //                             ":/images/handleMenu_searchInput.png",":/images/handleMenu_searchInput.png");  
    42.     _searchLineEdit->setStyleSheet("background-image:url(:/images/handleMenu_searchInput.png);border:1px solid #536874;");  
    43.     _searchLineEdit->move(8,38);  
    44.     _searchLineEdit->resize(168,23);  
    45.     _searchLineEdit->installEventFilter(this);  
    46.     //_searchLineEdit->setFocusPolicy(Qt::NoFocus);  
    47.      _btn = new QPushButton(this);  
    48.      _btn->resize(14,14);  
    49.      _btn->move(155,41);  
    50.      _btn->setStyleSheet("QPushButton{background-color:transparent;border:0px;}");  
    51.      _btn->setFocusPolicy(Qt::NoFocus);  
    52.      _btn->setVisible(false);  
    53.   
    54.      connect(_btn,SIGNAL(clicked()),this,SLOT(btnClicked()));  
    55.      _cluster = new QListWidget(this);  
    56.     _cluster->show();  
    57.     setListWidget();  
    58.     _cluster->setMouseTracking(true);  
    59.     _cluster->setFocusPolicy(Qt::NoFocus);  
    60.     //_cluster->installEventFilter(this);  
    61.     connect(_searchLineEdit,SIGNAL(textChanged(QString)),this,SLOT(textChange(QString)));  
    62.     connect(_page,SIGNAL(currentPageChanged(int)),this,SLOT(pageChange(int)));  
    63.     connect(_searchLineEdit,SIGNAL(pressed()),this,SLOT(editClicked()));  
    64.     connect(_cluster,SIGNAL(itemEntered(QListWidgetItem*)),this,SLOT(itemEnteredSlot(QListWidgetItem*)));  
    65.     connect(_cluster,SIGNAL(itemClicked(QListWidgetItem*)),this,SLOT(itemClickedSlot(QListWidgetItem*)));  
    66.     connect(_cluster,SIGNAL(currentRowChanged(int)),this,SLOT(rowChanged(int)));  
    67.     //this->setFocus();  
    68.     //this->installEventFilter(this);  
    69. }  
    70.   
    71. void ClusterListWidget::setListWidget()  
    72. {  
    73.     _cluster->setStyleSheet("QListWidget{background-color:transparent;color:#19649F;border:0px solid gray;}"  
    74.                                           "QListWidget::item{background-color:transparent;border:0px solid gray;padding-left:28px;color:#b4e5fd}"  
    75.                                           //"QListWidget::item:!selected{border:0px solid gray;padding-left:28px;color:#b4e5fd}"  
    76.                                           //"QListWidget::item:selected:active{background-image:url(:/images/handleMenu_lixt_bg_selected.png);color:#b4e5fd;border-width:0;}"  
    77.                                           "QListWidget::item:selected{background-image:url(:/images/handleMenu_lixt_bg_selected.png);}"  
    78.                                           );  
    79.     _cluster->move(0,62);  
    80.     _cluster->resize(183,540);  
    81.     _cluster->clear();  
    82.   
    83.     pageChange(1);  
    84.   
    85. }  
    86.   
    87. void ClusterListWidget::setTitle(QString title)  
    88. {  
    89.     lb2->setText(title);  
    90. }  
    91.   
    92. void ClusterListWidget::setImgs(const QString &normal, const QString &abnormal, const QString &error)  
    93. {  
    94.     _normal = normal;  
    95.     _abnormal = abnormal;  
    96.     __error = error;  
    97. }  
    98.   
    99. void ClusterListWidget::setVmImgs(const QString &linux_normal,  
    100.                                   const QString &linux_abnormal,  
    101.                                   const QString &linux_error,  
    102.                                   const QString &linux_off,  
    103.                                   const QString &windows_normal,  
    104.                                   const QString &windows_abnormal,  
    105.                                   const QString &windows_error,  
    106.                                   const QString &windows_off)  
    107. {  
    108.     _linux_normal = linux_normal;  
    109.     _linux_abnormal = linux_abnormal;  
    110.     _linux_error = linux_error;  
    111.     _linux_off = linux_off;  
    112.     _windows_normal = windows_normal;  
    113.     _windows_abnormal = windows_abnormal;  
    114.     _windows_error = windows_error;  
    115.     _windows_off = windows_off;  
    116. }  
    117.   
    118.   
    119. void ClusterListWidget::editClicked()  
    120. {  
    121.     _searchLineEdit->setStyleSheet("background-image:url(:/images/handleMenu_searchInput_click.png);border:1px solid #536874;");  
    122.     _searchLineEdit->update();  
    123.     _btn->setVisible(true);  
    124. }  
    125.   
    126. void ClusterListWidget::btnClicked()  
    127. {  
    128.     _searchLineEdit->clear();  
    129.     _searchLineEdit->setStyleSheet("background-image:url(:/images/handleMenu_searchInput.png);border:1px solid #536874;");  
    130.     this->setFocus();  
    131. }  
    132.   
    133. void ClusterListWidget::itemEnteredSlot(QListWidgetItem *i)  
    134. {  
    135.     _n = _cluster->row(i);  
    136.     if(_n == _cluster->currentRow())  
    137.     {  
    138.         _enter = false;  
    139.     }else{  
    140.     _enter = true;}  
    141.     _x = 0;  
    142.     _y = _cluster->row(i)*33 +62;  
    143.     _enterPixmap = QPixmap(":/images/handleMenu_lixt_bg_hover.png");  
    144.   
    145.     _cluster->update();  
    146. }  
    147.   
    148. void ClusterListWidget::itemClickedSlot(QListWidgetItem *i)  
    149. {  
    150.     int row =_cluster->row(i);  
    151.     qDebug()<< (_currentNum -1)*16 + row;  
    152.     _enter = false;//选中跟悬停  只显示选中背景图片  
    153.     _cluster->update();  
    154.   
    155. }  
    156.   
    157. void ClusterListWidget::rowChanged(int row)  
    158. {  
    159.   
    160.     //qDebug()<< (_currentNum -1)*16 + row;  
    161.     _enter = false;//选中跟悬停  只显示选中背景图片  
    162.     _cluster->update();  
    163.     _n = row;  
    164. }  
    165.   
    166. //bool ClusterListWidget::eventFilter(QObject *obj, QEvent *e)  
    167. //{  
    168. //    if(obj == _cluster){  
    169. //        if(e->type() == QEvent::Leave)  
    170. //        {  
    171. //            _enter = false;  
    172. //            _cluster->update();  
    173. //            _n = _cluster->currentRow();  
    174. //            return true;  
    175. //        }  
    176. //    }  
    177. //   return false;  
    178. //    QWidget::eventFilter(obj,e);  
    179. //}  
    180.   
    181. void ClusterListWidget::textChange(QString text)  
    182. {  
    183.     _cluster->clear();  
    184.     _list.clear();  
    185.     _searchList.clear();  
    186.     for(int i = 0;i < NameList.count();i++){  
    187.         if(NameList.at(i).contains(text))  
    188.         {  
    189.             _searchList.append(NameList.at(i));  
    190.         }  
    191.     }  
    192.     _list = _searchList;  
    193.     _maxNum = (_list.count() - 1) / 16 +1;  
    194.     _currentNum = 1;  
    195.     _page->setTotalPage(_maxNum);  
    196.     pageChange(1);  
    197.     _cluster->update();  
    198.   
    199. }  
    200.   
    201. void ClusterListWidget::pageChange(int currentnumber)  
    202. {  
    203.   
    204.     _currentNum = currentnumber;  
    205.     _cluster->clear();  
    206.   
    207.     switch (_type) {  
    208.     case 0:  
    209.         setTitle(tr("all cluster"));  
    210.         setImgs(":/images/handleMenu_clusters.png",  
    211.                 ":/images/handleMenu_clusters_abnormal.png",":/images/handleMenu_clusters_error.png");  
    212.         if(_currentNum != _maxNum)  
    213.         {  
    214.             for(int i= (_currentNum -1) * 16;i <(_currentNum) * 16 ;i++ )  
    215.             {  
    216.                 QListWidgetItem *item = new QListWidgetItem;  
    217.                 item->setSizeHint(QSize(183,33));  
    218.                 item->setText(" "+_list.at(i));  
    219.                 item->setIcon(QIcon(_normal));  
    220.                 _cluster->addItem(item);  
    221.             }  
    222.         }else{  
    223.             for(int i = (_currentNum -1) * 16;i < _list.count();i++)  
    224.             {  
    225.                 QListWidgetItem *item = new QListWidgetItem;  
    226.                  item->setSizeHint(QSize(183,33));  
    227.                 item->setText(" "+_list.at(i));  
    228.                 item->setIcon(QIcon(__error));  
    229.                 _cluster->addItem(item);  
    230.             }  
    231.         }  
    232.         break;  
    233.     case 1:  
    234.   
    235.         setImgs(":/images/handleMenu_host.png",  
    236.                 ":/images/handleMenu_host_abnormal.png",":/images/handleMenu_host_error.png");  
    237.         if(_currentNum != _maxNum)  
    238.         {  
    239.             for(int i= (_currentNum -1) * 16;i <(_currentNum) * 16 ;i++ )  
    240.             {  
    241.                 QListWidgetItem *item = new QListWidgetItem;  
    242.                 item->setSizeHint(QSize(183,33));  
    243.                 item->setText(" "+_list.at(i));  
    244.                 item->setIcon(QIcon(_abnormal));  
    245.                 _cluster->addItem(item);  
    246.             }  
    247.         }else{  
    248.             for(int i = (_currentNum -1) * 16;i < _list.count();i++)  
    249.             {  
    250.                 QListWidgetItem *item = new QListWidgetItem;  
    251.                  item->setSizeHint(QSize(183,33));  
    252.                 item->setText(" "+_list.at(i));  
    253.                 item->setIcon(QIcon(__error));  
    254.                 _cluster->addItem(item);  
    255.             }  
    256.         }  
    257.         break;  
    258.     case 2:  
    259.         setVmImgs(":/images/handleMenu_vm.png",":/images/handleMenu_vm_linux_abnormal.png",":/images/handleMenu_vm_linux_error.png",  
    260.                   ":/images/handleMenu_vm_linux_shutdown.png",":/images/handleMenu_vm_windows.png",":/images/handleMenu_vm_windows_abnormal.png",  
    261.                   ":/images/handleMenu_vm_windows_error.png",":/images/handleMenu_vm_windows_shutdown.png");  
    262.         if(_currentNum != _maxNum)  
    263.         {  
    264.             for(int i= (_currentNum -1) * 16;i <(_currentNum) * 16 ;i++ )  
    265.             {  
    266.                 QListWidgetItem *item = new QListWidgetItem;  
    267.                 item->setSizeHint(QSize(183,33));  
    268.                 item->setText(" "+_list.at(i));  
    269.                 item->setIcon(QIcon(_linux_abnormal));  
    270.                 _cluster->addItem(item);  
    271.             }  
    272.         }else{  
    273.             for(int i = (_currentNum -1) * 16;i < _list.count();i++)  
    274.             {  
    275.                 QListWidgetItem *item = new QListWidgetItem;  
    276.                  item->setSizeHint(QSize(183,33));  
    277.                 item->setText(" "+_list.at(i));  
    278.                 item->setIcon(QIcon(_windows_error));  
    279.                 _cluster->addItem(item);  
    280.             }  
    281.         }  
    282.         break;  
    283.     default:  
    284.         break;  
    285.     }  
    286.   
    287.     _cluster->setCurrentRow(0);  
    288. }  
    289.   
    290. void ClusterListWidget::paintEvent(QPaintEvent *e)  
    291. {  
    292.     QPainter painter(this);  
    293.     painter.drawPixmap(0, 0, backGroundPix.width(), backGroundPix.height(), backGroundPix);  
    294.     if(_enter)  
    295.     {  
    296.         painter.drawPixmap(_x,_y,183,33,_enterPixmap);  
    297.     }  
    298.     //painter.setPen(QColor("#b4e5fd"));  
    299. }  
    300.   
    301. void ClusterListWidget::showEvent(QShowEvent *e)  
    302. {  
    303.     setListWidget();  
    304. }  
    305.   
    306. void ClusterListWidget::keyPressEvent(QKeyEvent *e)  
    307. {  
    308.     qDebug()<<"aaaaaaaaaaaaaaaaaaaaaa"<<_n;  
    309.     //n = _cluster->currentRow();  
    310.     if(e->key() == Qt::Key_Up)  
    311.     {  
    312.         if(_n > 0)  
    313.         {  
    314.             _n -1;  
    315.         }  
    316.         itemEnteredSlot(_cluster->item(_n));  
    317.         //_cluster->setCurrentRow(n);  
    318.         return;  
    319.     }  
    320.     if(e->key() == Qt::Key_Down)  
    321.     {  
    322.         if( _n < _cluster->count() -1){  
    323.             _n += 1;  
    324.         itemEnteredSlot(_cluster->item(_n));  
    325.         }  
    326.         //_cluster->setCurrentRow(n);  
    327.         return;  
    328.     }  
    329.     if(e->key() == Qt::Key_Enter || e->key() == Qt::Key_Return)  
    330.     {  
    331.         qDebug()<<"777777777777777";  
    332.         _cluster->setCurrentRow(_n);  
    333.         return;  
    334.     }  
    335.     QWidget::keyPressEvent(e);  
    336. }  
    337. SearchLineEdit::SearchLineEdit(QWidget *parent)  
    338.    :QLineEdit(parent)  
    339. {  
    340.   
    341. }  
    342.   
    343. void SearchLineEdit::focusInEvent(QFocusEvent *e)  
    344. {  
    345.     emit pressed();  
    346.   
    347.     QLineEdit::focusInEvent(e);  
    348.   
    349. }  
    350.   
    351. void SearchLineEdit::focusOutEvent(QFocusEvent *e)  
    352. {  
    353.     QLineEdit::focusInEvent(e);  
    354. }  
    (3)clusterlistitem.h
    [html] view plain copy
    1. #ifndef CLUSTERLISTITEM_H  
    2. #define CLUSTERLISTITEM_H  
    3.   
    4. #include <QGraphicsItem>  
    5. #include "graphicsitembutton.h"  
    6. #include "clusterlistwidget.h"  
    7. #include <QPalette>  
    8. #include <QtGui>  
    9. class clusterListItem : public QObject, public QGraphicsItem  
    10. {  
    11.     Q_OBJECT  
    12. public:  
    13.     explicit clusterListItem(QGraphicsItem *parent = 0);  
    14.     QRectF boundingRect() const;  
    15. signals:  
    16.   
    17. protected:  
    18.     void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);  
    19.   
    20.     bool eventFilter(QObject *obj, QEvent *event);  
    21.   
    22. private slots:  
    23.     void slotBtnClicked();  
    24.   
    25. private:  
    26.     int _width;  
    27.     int _height;  
    28.     GraphicsItemButton * _listBtn;  
    29.     ClusterListWidget * _clusterWidget;  
    30.     QGraphicsProxyWidget *_proxy;  
    31.     bool _show;  
    32.     bool _focus;  
    33. };  
    34.   
    35. #endif // CLUSTERLISTITEM_H  
    (4)clusterlistitem.cpp
    [html] view plain copy
    1. #include "clusterlistitem.h"  
    2.   
    3. clusterListItem::clusterListItem(QGraphicsItem *parent) :  
    4.     QGraphicsItem(parent)  
    5.   ,_show(false)  
    6. {  
    7.     setFiltersChildEvents(true);  
    8.     //setAcceptedMouseButtons(Qt::LeftButton);  
    9.     //setAcceptHoverEvents(true);  
    10.     _width = 22;  
    11.     _height =21;  
    12.     _listBtn = new GraphicsItemButton(":/images/handleMenu_icon.png",  
    13.                                       ":/images/handleMenu_icon_hover.png",  
    14.                                       ":/images/handleMenu_icon_hover.png",  
    15.                                       "",  
    16.                                        GraphicsItemButton::normal,this);  
    17.   
    18.     _listBtn->setSize(22,21);  
    19.     _listBtn->setPos(0,0);  
    20.     _listBtn->installEventFilter(this);  
    21.     _clusterWidget = new ClusterListWidget(cluster);  
    22.     _proxy = new QGraphicsProxyWidget(this);  
    23.     _proxy->setWidget(_clusterWidget);  
    24.     _proxy->setPos(0,21);  
    25.     _proxy->setVisible(_show);  
    26.     _clusterWidget->installEventFilter(this);  
    27.     //this->installEventFilter(this);  
    28.     connect(_listBtn,SIGNAL(clicked()),this,SLOT(slotBtnClicked()));  
    29. }  
    30.   
    31. QRectF clusterListItem::boundingRect() const  
    32. {  
    33.     return QRectF(0, 0, _width, _height);  
    34. }  
    35.   
    36. void clusterListItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)  
    37. {  
    38.       //painter->fillRect(QRectF(0, 0, _width, _height), QColor("#FF0000"));  
    39. }  
    40.   
    41. bool clusterListItem::eventFilter(QObject *obj, QEvent *event)  
    42. {  
    43.     if (event->type() == QEvent::FocusIn) {  
    44.         qDebug() << "QEvent::FocusIn---" << obj;  
    45.     }  
    46.     if (event->type() == QEvent::FocusOut) {  
    47.         qDebug() << "QEvent::FocusOut---" << obj;  
    48.     }  
    49.     if (event->type() == QEvent::MouseButtonPress) {  
    50.         qDebug() << obj;  
    51.         if (obj == _clusterWidget) {  
    52.             return true;  
    53.         }  
    54.         else {  
    55.             if (_show == true) {  
    56.                 _listBtn->setCurrent(false);  
    57.                 _show = false;  
    58.                 //_clusterWidget->hide();  
    59.                 QPropertyAnimation *animation = new QPropertyAnimation(_clusterWidget, "geometry");  
    60.                 animation->setDuration(300);  
    61.                 animation->setStartValue(QRect(0,21,183,602));  
    62.                 animation->setEndValue(QRect(0,21,183,0));  
    63.                 animation->start();  
    64.             }  
    65.         }  
    66.     }  
    67.      return QObject::eventFilter(obj, event);  
    68. }  
    69.   
    70. void clusterListItem::slotBtnClicked()  
    71. {  
    72.     this->setFocus();  
    73.     _listBtn->setCurrent(true);  
    74.     if(!_show){  
    75.         //_proxy->setVisible(!_show);  
    76.         _proxy->show();  
    77.         QPropertyAnimation *animation = new QPropertyAnimation(_clusterWidget, "geometry");  
    78.         animation->setDuration(300);  
    79.         animation->setStartValue(QRect(0,21,183,0));  
    80.         animation->setEndValue(QRect(0,21,183,602));  
    81.         animation->start();  
    82.         _show = true;  
    83.     }  
    84.     else{  
    85.   
    86.         QPropertyAnimation *animation = new QPropertyAnimation(_clusterWidget, "geometry");  
    87.         animation->setDuration(300);  
    88.         animation->setStartValue(QRect(0,21,183,602));  
    89.         animation->setEndValue(QRect(0,21,183,0));  
    90.         animation->start();  
    91.         _show = false;  
    92.     }  
    93. }  
    (5)main.cpp
    [html] view plain copy
    1. #include "clusterlistwidget.h"  
    2. #include <QApplication>  
    3. #include <QTextCodec>  
    4. #include <QtGui>  
    5. #include "clusterlistitem.h"  
    6. int main(int argc, char *argv[])  
    7. {  
    8.     QApplication a(argc, argv);  
    9.     QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
    10.   
    11.     QGraphicsView view;  
    12.     //view.resize(300,800);  
    13.   
    14.     QGraphicsScene scene;  
    15.   
    16.     scene.setSceneRect(-100, -300, 200, 600);  
    17.     view.setScene(&scene);  
    18.     view.setSceneRect(0, 0, 200, 600);  
    19.     //view.setCacheMode(QGraphicsView::CacheBackground);  
    20.     //view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);  
    21.     clusterListItem *item = new clusterListItem;  
    22.     scene.addItem(item);  
    23.     item->setPos(0, 0);  
    24.     view.resize(314, 814);  
    25.     view.show();  
    26.     view.installEventFilter(item);  
    27.     return a.exec();  
    28. }  

    三、总结

    (1)可以在eventFilter的QEvent::FocusIn和QEvent::FocusOut增加当鼠标移出菜单后自动回收的功能。其他的功能还需进一步完善。
    (2)原文链接:http://blog.csdn.net/taiyang1987912/article/details/51002420
    展开全文
  • Qt QComboBox下拉列表做成圆角形式

    千次阅读 2018-04-19 18:18:05
    QComboBox *combobox = new QComboBox; combobox-&...setWindowFlags(Qt::Popup|Qt::FramelessWindowHint|Qt::NoDropShadowWindowHint); combobox-&gt;view()-&gt;window()-&gt;setAttrib...
  • 通过基本控件QPushButton,QWidget,实现下拉菜单,可以展开多级菜单。
  • Qt实现QQ好友下拉列表

    千次阅读 2013-08-24 20:31:12
    偶然发现Qt有个控件可以实现下拉列表,所以就试着实现一下类似QQ面板的下拉列表,这里主要实现几个功能:  1.可以删除列表中图标  2.可以像qq一样的,把某个分组下的图标转移到另外的分组  3.添加分组 代码里...
  • #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),... //给下拉列表框,添加选项 QStringList list; list<<"宝
  • Qt入门-下拉列表框QComboBox类

    千次阅读 2015-08-24 23:30:56
    QComboBox是QT GUI中的下拉列表框。 [cpp] view plaincopy class Q_GUI_EXPORT QComboBox : public QWidget  {   Q_OBJECT  常用方法和属性: (1)addItems void add...
  • QT控件QComboBox定制下拉列表为复选框的一个简单示例,在QT5.9环境下编译调试通过,可以参考此例子中的方法,进行定制修改。
  • Qt 之-下拉列表框QComboBox类

    千次阅读 2014-05-13 16:43:40
    QComboBox是QT GUI中的下拉列表框。 [cpp] view plaincopy class Q_GUI_EXPORT QComboBox : public QWidget  {   Q_OBJECT  常用方法和属性: (1)addItems void add...
  • QT的combobox下拉列表的宽度默认情况下与combobox本身的宽度是一致的,但是有时候下拉列表的文字很长,显示不开的时候,就需要我们手动设置其宽度, 原理是遍历每一项的长度,找到最大长度,然后使用setFixedWidth...
  • 在QTableView 中添加Combo控件,实现列表中的下拉选择控件,在Qt中Demo有了编辑框和spin的列表控件,我在demo中spin的工程中添加了combo,实现列表中的combo下拉选择控件,其他的控件也可以参考此方法开发,新加的为...
  • QT 4-6 下拉列表

    2018-05-16 20:48:40
    dialog.h :#ifndef DIALOG_H#define DIALOG_H#include &lt;QDialog&gt;#include&lt;QComboBox&gt;class Dialog : public QDialog{ Q_OBJECTpublic: Dialog(QWidget *parent = 0);...
  • 最近在完善之前做的一个基于人脸识别的打卡签到系统,在添加人脸信息时,手动输入学生信息太慢了,因此改进,增加一个新的功能:手动点击“导入数据”即将excel表中的数据加载到qt下拉列表中 操作演示如下: ...
  • Qt中的QComboBox在不同平台下有所差异(主要是不可编辑的QComboBox),如下样式A和样式B: 左边为样式A为“fusion”样式...右边样式B为“windowsvista”样式,它是win10下Qt的默认样式,其特点是下拉列表会显示在文
  • Go-Qt5开发之下拉列表 QComboBox案例说明demo.go 案例说明 QComboBox是允许用户从下拉列表中进行选择的控件。 示例中展示了一个QComboBox与一个QLabel,QComboBox控件中有5个选项(Linux系统的几个发行版名称)。 ...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 284
精华内容 113
关键字:

qt下拉列表