multiclip

创建 Qt 应用程序

在本章中,我们将构建一个名为“multiclip”的应用程序,它允许您存储和检索剪贴板中的多个文本剪贴。最终如下:

先创建一个新项目;

在“界面文件”拖入需要的控件,调整好布局;

通过信号与槽编辑器对几个按钮进行信号与槽的连接;

完整代码:

widget.h:

#ifndef WIDGET_H
#define WIDGET_H

#include <QListWidget>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void dataChanged();
    void clippingChanged(const QString &clipping);

    void addClipping();
    void copyPrevious();
    void deleteClipping();

private:
    Ui::Widget *ui;
    QClipboard *clipboard;
};
#endif // WIDGET_H


widget.cpp:

#include "widget.h"
#include "ui_multiclip.h"

#include <QClipboard>
#include <QListWidget>

/*第一行作用是对界面进行初始化,它按照我们在Qt设计器里设计的样子把窗体画出来,
 *把我们在Qt设计器里面定义的信号和槽建立起来。
 *接着给LCD设置背景颜色;并使窗体以LineEdit中的焦点开始。
 *获取一个指向Qt全局剪贴板的指针
 *将剪贴板的datachchanged()信号连接到自己创建的一个名为datachchanged()的槽;
 */
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->lengthLCDNumber->setStyleSheet("background-color: rgb(204,232,255);");
    ui->currentLineEdit->setFocus();
    clipboard = QApplication::clipboard();
    connect(clipboard, SIGNAL(dataChanged()), SLOT(dataChanged()));
    dataChanged();
}

Widget::~Widget()
{
    delete ui;
}

/*这个槽函数获取剪切板内容并更新lineEdit和ldc的显示
 *判断如果autoCheckBox勾选,就把剪切板内容添加到clipListWidget中
*/
void Widget::dataChanged()
{
    QString text = clipboard->text();
    clippingChanged(text);
    if (ui->autoCheckBox->isChecked())
       addClipping();
}

/*设置lineEdit和lcd的显示内容*/
void Widget::clippingChanged(const QString &clipping)
{
    ui->currentLineEdit->setText(clipping);
    ui->lengthLCDNumber->display((int)clipping.length());
}

/*addbutton槽函数;
 *如果有文本,lcd显示文本长度;
 *遍历ListWidget中的所有项目,以查看是否已经有相同的文本;
 *如果文本尚未在列表框中,我们将插入它。
*/
void Widget::addClipping()
{
    QString text = ui->currentLineEdit->text();
    if (!text.isEmpty())
    {
        ui->lengthLCDNumber->display((int)text.length());
        int i = 0;
        for ( ; i < (int)ui->clipListWidget->count(); i++)
        {
            QListWidgetItem* item = ui->clipListWidget->item(i);

            if (!item || item->text() == text)
            {
                i = -1;
                break;
            }
        }
        if (i != -1)
        {
            ui->clipListWidget->insertItem(0, text);
        }
    }
}

/*将选定的内容从ListWidget复制到lineEdit中,也将放在剪贴板上;
 *检查ListWidget中是否有选定项,如果是,则将该项复制到行编辑中。
*/
void Widget::copyPrevious()
{
    if (ui->clipListWidget->selectedItems().count() > 0)
    {
        clipboard->setText(ui->clipListWidget->currentItem()->text());
    }
}

/*删除按钮将删除ListWidget中的当前项并清除lineEdit*/
void Widget::deleteClipping()
{
    QListWidgetItem* currentItem = ui->clipListWidget->currentItem();
    if (currentItem)
    {
        delete currentItem;  // 删除当前选中的项
        clippingChanged(""); // 用空字符填充lineEdit
    }
}



main.cpp:

#include <QApplication>
#include "widget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值