【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_OBJECT


private:
    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();//回车符是一个block
    QIcon 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_OBJECT

public:
    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选择一个条目时,文本添加到 plainTextEdit
    ui->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)运行界面

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【开源】基于Vue和SpringBoot的音乐偏好度推荐系统

项目编号&#xff1a; S 012 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S012&#xff0c;文末获取源码。} 项目编号&#xff1a;S012&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 音乐档案模块2.1…

单臂路由与三层交换机

单臂路由 划分VLAN后同一VLAN的计算机属于同一个广播域&#xff0c;同一VLAN的计算机之间的通信是不成问题的。然而&#xff0c;处于不同VLAN的计算机即使是在同一交换机上&#xff0c;它们之间的通信也必须使用路由器。 图&#xff08;a&#xff09;是一种实现VLAN间路由的方…

Java编程中通用的正则表达式(二)

正则表达式&#xff0c;又称正则式、规则表达式、正规表达式、正则模式或简称正则&#xff0c;是一种用来匹配字符串的工具。它是一种字符串模式的表示方法&#xff0c;可以用来检索、替换和验证文本。正则表达式是一个字符串&#xff0c;它描述了一些字符的组合&#xff0c;这…

网络互连与常用设备

网络互连是为了将两个以上具有独立自治能力、同构或异构的计算机网络连接起来&#xff0c;实现数据流通&#xff0c;扩大资源共享的范围&#xff0c;或者容纳更多的用户。网络互连包括局域网与局域网的互连、局域网与广域网的互连、广域网与广域网的互连&#xff0c;这可以扩大…

【漏洞复现】华脉智联指挥调度平台命令执行漏洞

Nx01 产品简介 深圳市华脉智联科技有限公司&#xff0c;融合通信系统将公网集群系统、专网宽带集群系统、不同制式、不同频段的短波/超短波对讲、模拟/数字集群系统、办公电话系统、广播系统、集群单兵视频、视频监控系统、视频会议系统等融为一体&#xff0c;集成了专业的有线…

Python 从入门到精通 学习笔记 Day03

Python 从入门到精通 第三天 今日目标 流程控制语句、退出循环、练习学习的内容 一、流程控制语句 流程控制的三种方式&#xff1a;顺序语句、双分支语句、循环语句 双分支语句 Python 的双分支语句使用if-else语句实现。 其语法结构如下: if条件:#如果条作为真&#xff…

二十一章总结

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmission…

Mybatis XML增删操作(结合上文)

先来"增"操作 在UserInfoXMLMapper.xml里面写 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <…

【小红书运营指南1】赛道选择 + 账号运营全周期

小红书运营指南1 写在最前面11.23标签一级标签二级标签 网络资源整理1. 赛道选择近2年小红书女性人群画像 2. 基础认知阶段3. 账号启动阶段4. 选题规划阶段5. 爆款打造阶段6. 涨粉变现阶段涨粉变现阶段粉丝发展阶段 写在最前面 最近做的一个项目调研&#xff0c;调研和实际有一…

Docker网络架构介绍

本文主要介绍了Docker容器的单机网络架构与集群网络架构&#xff0c;辅以演示&#xff0c;并简单介绍了网络管理中的命令。 前文&#xff1a; Docker的安装与简单操作命令-CSDN博客 docker网络原理介绍 与ovs类似&#xff0c;docker容器采用veth-pair linux bridge (虚拟交…

LabelImg的使用及注意事项

LabelImg是一款开源的图像标注工具&#xff0c;它主要用于标注目标检测、语义分割和图像分类等深度学习中需要的数据集。通过使用LabelImg&#xff0c;用户可以快速、准确地为图片中的目标添加标注信息&#xff0c;从而建立数据集。 使用步骤&#xff1a; 下载LabelImg&#x…

[Linux] Apache的配置与运用

一、web虚拟主机的构台服务器上运行多个网站&#xff0c;每个网站实际上并不独立占用整个服务器&#xff0c;因此称为"虚拟"虚拟主机的虚拟主机服务可以让您充分利用服务器的硬件资源&#xff0c;大大降低了建立和运营网站的成本 Httpd服务使构建虚拟主机服务器变得容…

MyBatis——Java 持久层框架

文章目录 MyBatis 是什么准备工作创建一个数据库和表引入依赖 配置连接字符串和 MyBatisMyBatis 组成MyBatis 使用步骤定义一个类创建 MyBatis 接口&#xff08;以查询所有为例&#xff09;创建与接口对应的 xml 文件&#xff08;实现接口中的所有方法&#xff09;使用单元测试…

[面试题~k8s] 云原生必问基础篇

文章目录 概念篇1. k8s 是什么2. Container3. Pod4. Node5. Namespace6. Service7. Label8. Replica Set&#xff08;副本集)9. Deployment10. Volume11. Namespace12. PV 和 PVC 基础篇1. 删除 pod 流程2. k8s 有哪些组件master nodeworker node 3. k8s 和 docker 的关系4. 简…

Java网络编程——通过JDBC API访问数据库

关系数据库仍然是目前最流行的数据库系统。如果没有特别说明&#xff0c;本帖所说的数据库就都指关系数据库。关系数据库中最主要的数据结构是表&#xff0c;表用主键来标识每一条记录&#xff0c;表与表之间可以存在外键参照关系。数据库服务器提供管理数据库的各种功能&#…

shell条件测试

1.1.用途 为了能够正确处理Shell程序运行过程中遇到的各种情况&#xff0c;Linux Shell提供了一组测试运算符. 通过这些运算符&#xff0c;shell程序能够判断某种或者几个条件是否成立。 条件测试在各种流程控制语句&#xff0c;例如判断语句和循环语句中发挥了…

平台工程文化:软件开发的创新路径和协作之道

在快速发展的软件开发领域&#xff0c;具有前瞻性思维的企业组织正在拥抱平台工程文化的变革力量。这种创新方法强调创建共享平台、工具和实践&#xff0c;使开发人员能够更快、更高效地交付高质量的软件。在本文中&#xff0c;我们将深入探讨平台工程文化的核心原则和深远的好…

Java网络编程——基础入门

1、进程间的通信 进程指运行中的程序&#xff0c;进程的任务就是执行程序中的代码。EchoPlayer类是一个独立的Java程序&#xff0c;它可以在任意一台安装了JDK的主机上运行&#xff1a; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr…

Finereport基于linux的简单安装(单节点)

简介 本文以单节点简单部署为例&#xff0c;不适用企业级高可用部署策略。 FineReport的运行依赖于Tomcat &#xff0c;Tomcat 是免费且性能相对稳定的 Web 应用服务器,也可以充当JSP容器。它是一个用于运行Java Servlet和JavaServer Pages&#xff08;JSP&#xff09;的Web服务…

Eclipse 4.30 正式发布 来看看有哪些值得期待的新特性

Eclipse 4.30 已正式发布&#xff0c;主要特性如下&#xff1a; 1、支持新的 Java 语言特性&#xff1a;包括 JEP 440: Record Patterns 和 JEP 441: Pattern Matching for Switch 2、针对 Java 编辑器的快速修复功能&#xff1a;包括添加默认 case、移除默认 case 和插入 br…