【QT】QComboBox和QPlainTextEdit基本介绍和应用示例

目录

1.QComboBox

1.1 QComboBox概述

1.2 QComboBox信号

1.3 QComboBox常用功能

1.4 QComboBox添加简单项

1.6 QComboBox列表项的访问

2.QPlainTextEdit

2.1 QPlainTextEdit概述

2.2 QPlainTextEdit的基本属性

2.3 QPlainTextEdit的公共函数

2.4 QPlainTextEdit的公共槽

2.5 QPlainTextEdit的信号

2.6 QPlainTextEdit的简单应用

2.7 QComboBox和QPlainTextEdit的组合应用

1.QComboBox

1.1 QComboBox概述

QComboBox是下拉列表框组件类,它提供一个下拉列表供用户选择,选择的项目内容就会显示在外面,其他项目会被隐藏,同时在下拉时之前选择的项目位置会被标记好,可以理解显示的项目其实是一个之前选择位置项目的副本。这个控件其实预制很很多选项给用户选择,减少手动输入的麻烦。也可以QComboBox也直接当作一个QLineEdit用作输入。QComboBox除了显示可见下拉列表外,每个项(item,或称列表项)还可以关联一个QVariant类型的变量,用于存储一些不可见数据。QComBox可以是可编辑的,允许用户修改列表中的每个项目,如添加、删除、上移、下移操作,还可以设置项的图标,但是这个不会影响到预先设置项目。

1.2 QComboBox信号

如果QComBox的当前项发生变化,则发出两个信号,urrentIndexChanged() 和 activated()。无论更改是通过编程方式还是通过用户交互完成的,始终发出 currentIndexChanged(),而 active() 仅在更改由用户交互引起时发出。当用户突出显示QComBox弹出列表中的项目时,将发出 highlighted() 信号。所有三个信号都存在两个版本,一个带有QString参数,另一个带有int参数。如果用户选择或突出显示像素图,则仅发出 int 信号。每当可编辑QComBox的文本发生更改时,都会发出 editTextChanged() 信号。

1.3 QComboBox常用功能

当用户在可编辑QComBox中插入新项目(字符串)的时候,还是有一个插入的策略。默认策略是 InsertAtBottom,但您可以使用 setInsertPolicy() 更改此设置。

可以使用 QValidator 将输入限制为可编辑的QComBox;参见 setValidator()。默认情况下,接受任何输入。

QComBox提供了很多好用的功能。

  • 可以使用插入单个、多个Item,例如 insertItem() 和 insertItems()

  • 可以使用 setItemText() 修改项目

  • 可以使用 removeItem() 删除项目

  • 可以使用 clear() 删除所有项目

  • 当前项的文本由 currentText() 返回,编号项的文本与 text() 一起返回

  • 可以使用 setCurrentIndex() 设置当前项

  • QComBox中的项目个数由 count() 返回

  • 可以使用 setMaxCount() 设置的最大项目数

  • 还可以用 setEditable() 是否可编辑 等等

对于可编辑的QComBox,您可以使用 setCompleter() 设置自动补全,就是输入一部分内容,就显示一个可能选择列表,等后面专门用 QCompleter 来完成。

1.4 QComboBox添加简单项

QComBox可以包含像素图以及字符串;可以用 insertItem() 和 setItemText() 的相关重置函数来插入带图标的列表项。

对于可编辑的QComBox,提供了函数 clearEditText(),用于清除显示的字符串而不更改QComBox的内容。(其实就是只是修改当前的显示内容,之前预制的项目还是不会被修改。)

void Widget::on_btnIniItemsclicked()

{//"初始化列表"按钮

QIcon icon;

icon.addFiIe(":/images/icons/aim.ico");

ui—>comboBox—>clear();

for(int i=0;i<20;i++){

    ui—>comboBox—>addItem(icon,QString::asprintf("Item %d",i));//带图标

    //ui—>comboBox—>addItem(QString::asprintf("Item %d",i));//不带图标

}

添加一个项时可以指定一个图标,图标来源于资源文件。

addltem()用于添加一个列表项,如果只是添加字符串列表项,而且数据来源于一个QStringList变量,可以使用addltems()函数,示例代码如下:

ui—>comboBox—>clear();

QStringList strList;

strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";

ui—>comboBox—>addItems(strList);

1.5 QComboBox添加具有用户数据的项

QComboBox::addItem()函数的两种参数的原型定义如下:

void addltem(const QString &text,const QVariant &userData = QVariant())

void addltem(const QIcon &ico,const QString &text,const QVariant &userData = 

QVariant())

不管是哪一个addltem()函数,后面都有一个可选的QVariant类型的参数userData,可以利用

这个变量存储用户定义数据。

这里定义了一个关联容器类QMap<QString,int>City_Zone,用于存储<城市,区号>映射表。为City_Zone填充数据后,给comboBox2添加项时,使用了foreach关键字遍历City_Zone.keys()。

按钮信号触发ComboBox组件使用用户数据,“初始化城市+区号”按钮的槽函数代码如下:

void Widget::on_btnIni2_clicked()

{//初始化具有自定义数据的

QMap<QString,int> City_Zone;

City_Zone.insert("北京",10);

City_Zone.insert("上海",21);

City_Zone.insert("天津",22);

City_Zone.insert("大连",411);

City_Zone.insert("锦州",416);

City_Zone.insert("徐州",516);

City_Zone.insert("福州",591);

City_Zone.insert"青岛",532);

ui->comboBox2->c1ear();

foreach(const QString &str,City_Zone.keys())

//添加项语句如下:城市名称作为项显示的字符串,电话区号作为项关联的用户数据,但是在列表框里只能看到

城市名称。

ui->comboBox2->addItem(str,City_Zone.value(str));

//注意:将City_zone的内容添加到列表框之后,列表框里显示的列表项的顺序与源程序中设置City_zone的顺序不一致,因为QMap<Key,T>容器类会自动按照Key排序。

1.6 QComboBox列表项的访问

QComboBox存储的项是一个列表,但是QComboBox不提供整个列表用于访问,可以通过索引访问某个项。访问项的一些函数主要有以下几种。

  • int currentlndex(),返回当前项的序号,第一个项的序号为0。

  • QString currentText(),返回当前项的文字。

  • QVariant currentData(int role= Qt::UserRole),返回当前项的关联数据,数据的缺省角色为role:Qt::UserRole

  • QString itemText(int index),返回指定索引号的项的文字。

  • QVariant itemData(int index,int role=Qt::UserRole),返回指定索引号的项的关联数据。

  • int count(),返回项的个数。

在一个QComboBox组件上选择项发生变化时,会发射如下两个信号:

void currentlndexChanged(int index)

void currentlndexChanged(const QString &text)

这两个信号只是传递的参数不同,一个传递的是当前项的索引号,一个传递的当前项的文字。

2.QPlainTextEdit

2.1 QPlainTextEdit概述

  QPlainTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。  QPlainTextEdit是纯文本的高级查看器/编辑器,它经过优化,可以处理大型文档并快速响应用户输入。QPlainTextEdit使用与QTextEdit非常相同的技术和概念,但针对纯文本处理进行了优化。QPlainTextEdit适用于段落和字符,实际应用中显示串口监控信息、网络传输信息、文本文件读取编辑等情景下使用。

2.2 QPlainTextEdit的基本属性

1、backgroundVisible

        该属性表示确定调色板背景是否在文档区域之外可见。

        bool backgroundVisible() const

        void setBackgroundVisible(bool visible)

        如果设置为true,则纯文本编辑器将在文本文档未覆盖的视口区域上绘制调色板背景。该特性使用户可以直观地区分使用调色板的基本色绘制的文档区域和未被任何文档覆盖的空白区域。

2、blockCount        

        此属性保存文档中文本块的数量(回车换行之后算单独一块)。默认情况下,在空文档中,此属性的值为1。

            int blockCount() const

3、centerOnScroll

        此属性用于确定光标是否应该在屏幕上居中。

        bool centerOnScroll() const

        void setCenterOnScroll(bool enabled)

        设置为true,则纯文本编辑器将垂直滚动文档,使光标在视窗中心可见,允许文本编辑滚动到文档末尾以下。我们光标往下到底部的时候,继续往下屏幕会居中。

        设置为false,则纯文本编辑将滚动尽可能小的量,以确保光标可见。

4、cursorWidth

        该属性表示光标的宽度,默认宽度为1个像素。

        int cursorWidth() const

        void setCursorWidth(int width)

5、documentTitle

        该属性表示文档的标题,没有实际的效果。

        QString documentTitle() const

        void setDocumentTitle(const QString &title)

6、lineWrapMode

        该属性表示自动换行策略,默认QPlainTextEdit::WidgetWidth。

        QPlainTextEdit::LineWrapMode lineWrapMode() const

        void setLineWrapMode(QPlainTextEdit::LineWrapMode mode)

  • NoWrap   不换行

  • WidgetWidth  文字被包装在文本编辑的右边缘,换行发生在空白处,保持整个单词完整

7、wordWrapMode

        该属性表示单词间换行策略,默认QTextOption::WrapAtWordBoundaryOrAnywhere。

        QTextOption::WrapMode wordWrapMode() const

        void setWordWrapMode(QTextOption::WrapMode policy)

  • NoWrap     不换行

  • WordWrap   文本在单词边界处换行

  • ManualWrap  不换行

  • WrapAnywhere   文本可以在一行中的任何点换行,即使它出现在单词的中间。

  • WrapAtWordBoundaryOrAnywhere   优先在字边界处换行;否则,它将出现在行上的适当点上,甚至在单词的中间。

8、maximumBlockCount

        该属性表示文档块的最大个数,默认为0。当超出最大限制的时候,会从开头删除块。如果设置的是负数或者零,表示不限制。设置此属性会禁用撤消重做历史记录。

        int maximumBlockCount() const

        void setMaximumBlockCount(int maximum)

9、overwriteMode

        该属性保存用户输入的文本是否会覆盖现有文本。

        和许多文本编辑器一样,纯文本编辑器小部件可以配置为使用用户输入的新文本插入或覆盖现有文本。如果此属性为true,现有文本将被新文本逐字符覆盖;否则,将在光标位置插入文本,取代现有文本。

        大多数编辑器都是按下键盘的Insert键,开启此模式,软件实现可以响应按键事件,检测按下Insert按键的时候,切换此状态即可。

        bool overwriteMode() const

        void setOverwriteMode(bool overwrite)

10、placeholderText

        该属性表示当文档内容为空的时候显示占位符提示文本。

        QString placeholderText() const

        void setPlaceholderText(const QString &placeholderText)

11、plainText

        该属性表示当前文本内容,重新设置会覆盖之前的内容,撤销/重做历史将被重置,如果光标不在开头,那么文本格式也会被重置。

        QString toPlainText() const

        void setPlainText(const QString &text)

12、readOnly

        该属性表示内容是否可只读,默认false。

        bool isReadOnly() const

        void setReadOnly(bool ro)

13、tabChangesFocus

        该属性表示用户按下Tab键是否缩进,默认fasle。

        bool tabChangesFocus() const

        void setTabChangesFocus(bool b)

14、tabStopDistance

        该属性表示以像素为单位保存制表位距离,默认情况下,此属性的值为80。这个属性在Qt 5.10中被引入。

        qreal tabStopDistance() const

        void setTabStopDistance(qreal distance)

15、textInteractionFlags

        该属性表示显示文本如何与用户输入交互策略,readOnly属性会影响这个策略。

        Qt::TextInteractionFlags textInteractionFlags() const

        void setTextInteractionFlags(Qt::TextInteractionFlags flags)

  • NoTextInteraction   不与文本做交互

  • TextSelectableByMouse   可以用鼠标选择文本,并使用上下文菜单或标准键盘快捷键将文本复制到剪贴板

  • TextSelectableByKeyboard   可以用键盘上的光标键选择文本。显示一个文本光标。

  • LinksAccessibleByMouse   链接可以用鼠标突出显示和激活。

  • LinksAccessibleByKeyboard  链接可以使用tab键聚焦,并使用enter键激活。

  • TextEditable   文本是完全可编辑的。

  • TextEditorInteraction    TextSelectableByMouse+TextSelectableByKeyboard+TextEditable

  • TextBrowserInteraction  TextSelectableByMouse+LinksAccessibleByMouse+LinksAccessibleByKeyboard

16、undoRedoEnabled

        该属性表示是否开启撤销和重做,默认开启。

        bool isUndoRedoEnabled() const

        void setUndoRedoEnabled(bool enable)

2.3 QPlainTextEdit的公共函数

1)anchorAt

        返回位置pos处锚的引用,如果该点不存在锚,则返回一个空字符串。

        QString anchorAt(const QPoint &pos) const

        当我们需要在文档上打开一个链接,逻辑是鼠标在链接处按下并且在此链接上释放,可以通过鼠标按下和释放事件去检测鼠标事件触发。但我们如何去判断是否在同一个链接上触发的事件,这时候就需要用到anchorAt去检测某pos处的锚。

#ifndef PLAINTEXTEDIT_H
#define PLAINTEXTEDIT_H#include <QPlainTextEdit>
#include <QMouseEvent>class PlainTextEdit : public QPlainTextEdit
{Q_OBJECTprivate:QString clickedAnchorStr;public:explicit PlainTextEdit(QWidget *parent = 0) : QPlainTextEdit(parent){}void mousePressEvent(QMouseEvent *e){clickedAnchorStr = (e->button() & Qt::LeftButton) ? anchorAt(e->pos()) :QString();QPlainTextEdit::mousePressEvent(e);}void mouseReleaseEvent(QMouseEvent *e){if (e->button() & Qt::LeftButton && !clickedAnchor.isEmpty() &&anchorAt(e->pos()) == clickedAnchorStr){emit linkActivated(clickedAnchor);}QPlainTextEdit::mouseReleaseEvent(e);}signals:void linkActivated(QString);
};

2)canPaste

        返回是否可以粘贴。

        bool canPaste() const

3)createStandardContextMenu

        当用户鼠标右击的时候创建和显示一个menu菜单栏小窗口,一般在contextMenuEvent事件中触发。

        QMenu *createStandardContextMenu()

        QMenu *createStandardContextMenu(const QPoint &position)

void MyQPlainTextEdit::contextMenuEvent(QContextMenuEvent *event)
{QMenu *menu = createStandardContextMenu();menu->addAction(tr("My Menu Item"));//...menu->exec(event->globalPos());delete menu;
}

4)currentCharFormat

        返回当前使用的的字符格式。

        QTextCharFormat currentCharFormat() const

5)setCurrentCharFormat

        设置当前使用的字符格式QTextCharFormat。

        void setCurrentCharFormat(const QTextCharFormat &format)

6)cursorForPosition

        返回某坐标下的文本光标QTextCursor(包含关于光标在文本中的位置和它所做的任何选择的信息),经典用法用来判断是否越界。  

        QTextCursor cursorForPosition(const QPoint &pos) const

7)cursorRect

        返回一个包含文本光标的QRect矩形,经典用法用来判断是否越界。

        QRect cursorRect(const QTextCursor &cursor) const

        QRect cursorRect() const

8)document

        返回文档类QTextDocument。

        QTextDocument *document() const

9)setDocument

        设置一个文档类QTextDocument,使它成为编辑器的文档。

        void setDocument(QTextDocument *document)

10)ensureCursorVisible

        通过滚动文档让光标可见。

        void ensureCursorVisible()

11)setExtraSelections

        void setExtraSelections(const QList<QTextEdit::ExtraSelection> &selections)

        此函数允许用给定的颜色临时标记文档中的某些区域,指定为选择。例如,在编程编辑器中,用给定的背景颜色标记整行文本以指示断点的存在。

12)extraSelections

        返回设置的额外选择项。

        QList<QTextEdit::ExtraSelection> extraSelections() const

13)find

        多个方法查找字符、表达式、正则表达式是否存在。

        bool find(const QString &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())

        bool find(const QRegExp &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())

        bool find(const QRegularExpression &exp, QTextDocument::FindFlags options = QTextDocument::FindFlags())

14)loadResource

        加载由给定类型和名称指定的资源。这个函数是QTextDocument::loadResource()的扩展。

        QVariant loadResource(int type, const QUrl &name)

15)moveCursor

        通过执行给定的操作移动光标。

        void moveCursor(QTextCursor::MoveOperation operation, QTextCursor::MoveMode mode = QTextCursor::MoveAnchor)

16)print

         这相当于直接调用文档上的print方法,只不过该函数还支持QPrinter::Selection作为打印范围。

        void print(QPagedPaintDevice *printer) const

17)toPlainText

        纯文本形式返回字符串。

        QString toPlainText() const

2.4 QPlainTextEdit的公共槽

void appendHtml(const QString &html)        //尾部加入html格式文本

void appendPlainText(const QString &text)   //尾部添加纯文本

void centerCursor()                         //居中光标

void clear()                                //清除

void copy()                                 //复制

void cut()                                  //剪切

void insertPlainText(const QString &text)   //插入纯文本

void paste()                                //粘贴

void redo()                                 //重做

void selectAll()                            //选择全部

void setPlainText(const QString &text)      //清空之前的文本,并设置纯文本

void undo()                                 //撤销

void zoomIn(int range = 1)                  //缩小

void zoomOut(int range = 1                  //放大

2.5 QPlainTextEdit的信号

//文本块数量改变触发

void blockCountChanged(int newBlockCount)

//可复制触发

void copyAvailable(bool yes)

//光标位置改变触发

void cursorPositionChanged()

//修改状态发生更改时,触发此信号

void modificationChanged(bool changed)

//可重做触发

void redoAvailable(bool available)

//选择内容改变触发

void selectionChanged()

//文本内容改变触发

void textChanged()

//可撤销触发

void undoAvailable(bool available)

//文档更新触发,rect表示新视口区域,dy表示滚动像素量

void updateRequest(const QRect &rect, int dy)

2.6 QPlainTextEdit的简单应用

1.QPlainTextEdit的功能

        QPlainTextEdit是用于编辑多行文本的编辑器,用于显示和编辑多行简单文本。另外,还有一个QTextEdit组件,是一个所见即所得的可以编辑带格式文本的组件,以HTML格式标记符定义文本格式。

        使用QPIainTextEdit::appendPlainText(const QString &text)函数就可以向PlainTextEdit组件添加一行字符串。

        QPlainTextEdit提供cut()、copy()、paste()、undo()、redo()、clear()、selectAII()等标准编辑功

能的槽函数,QPlainTextEdit前还提供一个标准的右键快捷菜单。

2. 逐行读取文字内容

如果要将QPlainTextEdit组件里显示的所有文字读取出来,有一个简单的函数toPIainText()可

以将全部文字内容输出为一个字符串,其定义如下:

QString QPIainTextEdxt::toPlainText() const

但是如果要逐行读取QPIainTextEdit组件里的字符串,则稍微麻烦一点。

“文本框内容添加到ComboBox”按钮的响应代码,它将plainTextEdit里的每一行作为一个项添加到comboBox里。

void Widge::on_btnToComboBox_clicked()
{//plainTextEdit的内容逐行添加为comboBox的项QTextDocument* doc=ui—>plainTextEdit—>document();//文本对象int cnt=doc->blockCount();//回车符是一个blockQIcon icon(":/images/icons/aim.ico"); ui—>comboBox—>c1ear();for(int i=0;i<cnt;i++){ QTextBlock textLine = doc->findBlockByNumber(i);//文本中的一段QString str = textLine.text();ui->comboBox->addItem(ico,str);}
}

   QPIainTextEdit的文字内容以QTextDocument类型存储,函数document()返回这个文档对象的

指针。

    QTextDocument是内存中的文本对象,以文本块的方式存储,一个文本块就是一个段落,每

个段落以回车符结束。QTextDocument提供一些函数实现对文本内容的存取。

  • int blockCount(),获得文本块个数。

  • QTextBlockfindBIockByNumber(int blockNumber),读取某一个文本块,序号从0开始,至

blockCount()-1结束。

    一个document有多个TextBIock,从document中读取出的一个文本块类型为QTextBIock,通过QTextBlock::text()函数可以获取其纯文木文字。

3.使用QPlainTextEdit自带的快捷菜单

    QPlainTextEdit是一个多行文字编辑框,有自带的右键快捷菜单,可实现常见的编辑功能。在

UI设计器里,选择为plainTextEdit的customContextMenuRequested()信号生成槽函数,编写如下的代码,就可以创建并显示QPIainTextEdit的标准快捷菜单:

void Widget::on_plainTextEdit_customContextMenuRequested(const QPoint &pos){//创建并显示标准弹出式菜单QMenu* menu = ui->plainTextEdit->createStandardContextMenu();menu->exec(pos);}

2.7 QComboBox和QPlainTextEdit的组合应用

(1)main.cpp文件

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();re

(2)widget.h文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_btnIniItems_clicked();void on_btnClearItems_clicked();void on_chkBoxEditable_clicked(bool checked);void on_comboBox_currentIndexChanged(const QString &arg1);void on_btnClearText_clicked();void on_chkBoxReadonly_clicked(bool checked);void on_btnToComboBox_clicked();void on_plainTextEdit_customContextMenuRequested(const QPoint &pos);void on_btnIni2_clicked();void on_comboBox2_currentIndexChanged(const QString &arg1);private:Ui::Widget *ui;
};#endif // WIDGET_H

(3)widget.cpp文件

#include "widget.h"
#include "ui_widget.h"#include    <QTextDocument>
#include    <QTextBlock>
#include    <QMenu>#include    <QMap>
#include    <QVariant>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_btnIniItems_clicked()
{ //"初始化列表"按键QIcon   icon;icon.addFile(":/images/icons/aim.ico");ui->comboBox->clear(); //清除列表for (int i=0;i<20;i++)ui->comboBox->addItem(icon,QString::asprintf("Item %d",i)); //添加一个字符串
//        ui->comboBox->addItem(QString::asprintf("Item %d",i)); //添加一个字符串//    QStringList strList;
//    strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";
//    ui->comboBox->addItems(strList);
}void Widget::on_btnClearItems_clicked()
{ui->comboBox->clear(); //清除条目
}void Widget::on_chkBoxEditable_clicked(bool checked)
{ //设置comboBox是否可编辑ui->comboBox->setEditable(checked);
}void Widget::on_comboBox_currentIndexChanged(const QString &arg1)
{ //comboBox选择一个条目时,文本添加到 plainTextEditui->plainTextEdit->appendPlainText(arg1);
}void Widget::on_btnClearText_clicked()
{ //清除文本框ui->plainTextEdit->clear();
}void Widget::on_chkBoxReadonly_clicked(bool checked)
{//设置 plainTextEdit 的 ReadOnly 属性ui->plainTextEdit->setReadOnly(checked);
}void Widget::on_btnToComboBox_clicked()
{ //plainTextEdit 的内容逐行添加为 comboBox 的条目
//    QTextDocument   *doc;       //文本对象
//    QTextBlock      textLine;   //文本中的一段QTextDocument*  doc=ui->plainTextEdit->document(); //QPlainTextEdit 的内容保存在一个 QTextDocument 里int cnt=doc->blockCount();//QTextDocument分块保存内容,文本文件就是硬回车符是一个block,//    QIcon   icon;QIcon   icon(":/images/icons/aim.ico");
//    icon.addFile(":/images/icons/aim.ico");ui->comboBox->clear();  //清除条目for (int i=0; i<cnt;i++) //扫描所有 blobk{QTextBlock textLine=doc->findBlockByNumber(i);//用blobk编号获取block,就是获取一行QString str=textLine.text(); //转换为文本ui->comboBox->addItem(icon,str); //添加一个条目到comboBox}
}void Widget::on_plainTextEdit_customContextMenuRequested(const QPoint &pos)
{ //创建并显示标准弹出式菜单
//    Q_UNUSED(pos);
//    QMenu   *menu;QMenu* menu=ui->plainTextEdit->createStandardContextMenu(); //创建标准右键菜单
//    menu->exec(QCursor::pos());//在鼠标光标位置显示右键快捷菜单menu->exec(pos);//在鼠标光标位置显示右键快捷菜单
}void Widget::on_btnIni2_clicked()
{//初始化具有自定义数据的comboBox
//QMap自动根据 key排序QMap<QString, int> City_Zone;City_Zone.insert("北京",10);City_Zone.insert("上海",21);City_Zone.insert("天津",22);City_Zone.insert("大连",411);City_Zone.insert("锦州",416);City_Zone.insert("徐州",516);City_Zone.insert("福州",591);City_Zone.insert("青岛",532);ui->comboBox2->clear();使用迭代器
//    QMapIterator<QString, int> item(City_Zone);
//    while (item.hasNext()) {
//        item.next();
//        ui->comboBox2->addItem(item.key(),
//                               QVariant::fromValue(item.value()));
//    }foreach(const QString &str,City_Zone.keys())ui->comboBox2->addItem(str,City_Zone.value(str));
}void Widget::on_comboBox2_currentIndexChanged(const QString &arg1)
{ //条目有用户数据QString zone=ui->comboBox2->currentData().toString();ui->plainTextEdit->appendPlainText(arg1+":区号="+zone);
}

(4)widget.ui文件

(5)运行界面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/214462.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DDD领域驱动设计系列-原理篇-战略设计

概述 DDD领域驱动设计是架构方法论&#xff0c;适用于业务逻辑较复杂系统。 DDD核心目的能输出领域如何划分&#xff0c;以及架构分层如何构建。 本文章系列会分2部分讲述DDD&#xff1a;1、DDD原理&#xff1b;2、DDD实践。DDD原理分为战略及战术设计2篇来讲述&#xff1b;…

Excel 动态拼接表头实现导出

public class Column {//单元格内容private String content;//字段名称&#xff0c;用户导出表格时反射调用private String fieldName;//这个单元格的集合private List<Column> listTpamscolumn new ArrayList<Column>();int totalRow;int totalCol;int row;//exc…

MongoDB知识总结

这里写自定义目录标题 MongoDB基本介绍MongoDB基本操作数据库相关集合相关增删改查 MongoDB基本介绍 简单介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产…

每日一练【查找总价格为目标值的两个商品】

一、题目描述 题目链接 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 示例 1&#xff1a; 输入&#xff1a;price [3, 9, 12, 15], target 18 输出&#xff1a;[3,15] …

集成测试如何做?

今天学习下如何进行集成测试。 什么是集成测试? 集成测试被定义为一种测试类型&#xff0c;其中软件模块在逻辑上集成并作为一个组进行测试。一个典型的软件项目由多个软件模块组成&#xff0c;由不同的程序员编码。此级别测试的目的是在集成这些软件模块时&#xff0c;暴露…

Redis哨兵(sentinel)

文章目录 简介搭建框架具体步骤主要文件参数开始配置 案例分析原有的master挂了 哨兵运行流程和选举原理主观下线客观下线(Objectively Down)选举出领导者哨兵(哨兵中选出兵王) 选新的master使用建议 简介 将某一个从库转换为新主库&#xff0c;继续对外服务将某一个从库转换为…

【js】js实现多个视频连续播放:

文章目录 一、效果&#xff1a;二、实现&#xff1a;三、案例&#xff1a; 一、效果&#xff1a; 二、实现&#xff1a; <!DOCTYPE html> <html> <head><title>Video Player</title><style>#progressBar { width: 800px;height: 20px;b…

「行业应用」图表控件LightningChart在工业遥测领域的应用

LightningChart.NET完全由GPU加速&#xff0c;并且性能经过优化&#xff0c;可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D&#xff0c;高级3D&#xff0c;Polar&#xff0c;Smith&#xff0c;3D饼/甜甜圈&#xff0c;地理地图和GIS图表以及适用于科学…

[LeetCode]-283. 移动零-1089. 复写零

目录 283. 移动零 描述 解析 代码 1089. 复写零 描述 解析 代码 283. 移动零 283. 移动零https://leetcode.cn/problems/move-zeroes/ 描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &…

MyBatis 四大核心组件之 StatementHandler 源码解析

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

视频封面提取:精准截图,如何从指定时长中提取某一帧图片

在视频制作和分享过程中&#xff0c;一个有吸引力的封面或截图往往能吸引更多的观众点击观看。有时候要在特定的时间段内从视频中提取一帧作为封面或截图。如果每个视频都手动提取的话就会耗费很长时间&#xff0c;那么如何智化能批量提取呢&#xff1f;现在一起来看下云炫AI智…

RabbitMQ学习笔记10 综合实战 实现新商家规定时间内上架商品检查

配置文件&#xff1a; 记住添加这个。 加上这段代码&#xff0c;可以自动创建队列和交换机以及绑定关系。 我们看到了我们创建的死信交换机和普通队列。 我们可以看到我们队列下面绑定的交换机。 我们创建一个controller包进行测试: 启动&#xff1a; 过一段时间会变成死信队列…

030 - STM32学习笔记 - ADC(四) 独立模式多通道DMA采集

030 - STM32学习笔记 - ADC&#xff08;四&#xff09; 独立模式多通道DMA采集 中断模式和DMA模式进行单通道模拟量采集&#xff0c;这节继续学习独立模式多通道DMA采集&#xff0c;使用到的引脚有之前使用的PC3&#xff08;电位器&#xff09;&#xff0c;PA4&#xff08;光敏…

10、pytest通过assert进行断言

官方实例 # content of test_assert1.pydef f():return 3def test_function():assert f() 4def test_assert_desc():a f()# assert a % 2 0assert a % 2 0, "value was odd, should be even"解读与实操 pytest允许你使用标准python断言来验证测试中的期望值&am…

【深度学习】强化学习(四)强化学习的值函数

文章目录 一、强化学习问题1、交互的对象2、强化学习的基本要素3、策略&#xff08;Policy&#xff09;4、马尔可夫决策过程5、强化学习的目标函数6、值函数1. 状态值函数&#xff08;State Value Function&#xff09;a. 状态值函数的定义b. 贝尔曼方程&#xff08;Bellman Eq…

QT5.4.1无法打开文件

问题描述&#xff1a;起初是在QT代码中运行打开文件代码&#xff1a; QString gFilename QFileDialog::getOpenFileName(this,"open File",path,"*", nullptr,QFileDialog::DontUseNativeDialog);时&#xff0c;出现了堵塞情况&#xff0c;经过多次实验一…

【数据结构】手撕排序

&#x1f525;博客主页&#xff1a; 小羊失眠啦. &#x1f3a5;系列专栏&#xff1a;《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 文章目录 一、排序的概念及其运用1.1 排序的概念1.2 常见的算法排序 二、 冒泡排序三、直接插入排…

HarmonyOS应用开发者基础认证考试(稳过)

判断题 ​​​​​​​ 1. Web组件对于所有的网页都可以使用zoom(factor: number)方法进行缩放。错误(False) 2. 每一个自定义组件都有自己的生命周期正确(True) 3. 每调用一次router.pushUrl()方法&#xff0c;默认情况下&#xff0c;页面栈数量会加1&#xff0c;页面栈支持的…

深度学习与计算机视觉技术的融合

深度学习与计算机视觉技术的融合 一、引言 随着人工智能技术的不断发展&#xff0c;深度学习已经成为了计算机视觉领域的重要支柱。计算机视觉技术能够从图像和视频中提取有用的信息&#xff0c;而深度学习则能够通过学习大量的数据来提高计算机视觉技术的性能。本文将探讨深…

吾爱破解置顶的“太极”,太好用了吧!

日常工作和娱乐&#xff0c;都需要用到不同类型的软件&#xff0c;哪怕软件体积不大&#xff0c;也必须安装&#xff0c;否则到用时找不到就非常麻烦了。 其实&#xff0c;很多软件不一定一样不剩地全部安装一遍&#xff0c;一方面原因是用的不多&#xff0c;另一方面多少有点…