QT实现简单的上位机软件(2)

今天闲着没事,又开始搞一下这上位机软件,感觉QT用起来还是比较有趣的。而且回头一看,用QT写的界面还这么丑是怎么回事?

QT实现简单的上位机软件(2)_第1张图片

根本不能忍好吗。问了一下项目BOSS有什么功能需要完善,然后顺便搞了点美化,就搞成下面这样了。(虽然还是很丑)

QT实现简单的上位机软件(2)_第2张图片

可以看到加入了查找标签、显示总数量的功能,还有下面的控件QTableWidget的标题栏有个小箭头,是点击标题栏进行排序的功能。很明显,这3个都是跟QTableWidget有关的操作,果断看帮助文件和查百度。

首先说显示总数量,很简单,一个QLabel加setText()函数搞定
//字符串里的%1对应参数.arg()
ui->TagCountLabel->setText(tr("接收标签总数量:%1").arg(TagAddrList.size())); 

查找和排序这里花了一定时间,主要是对QTable Widget控件不熟悉。实现点击排序主要依靠QHeaderView中自带的sectionClicked(int)信号,和QTableWidget自带的SLOT: sortByColumn(int)),这2个查了好久才找到,然后把SIGNAL和SLOT连接起来就行了。

ui->TagTable->setSortingEnabled(true); //可排序
QHeaderView *TagHeader = ui->TagTable->horizontalHeader();
connect(TagHeader, SIGNAL(sectionClicked(int)), ui->TagTable, SLOT(sortByColumn(int)));

了解QTableWidget后查找也不难实现,按下按钮(触发clicked信号进入SLOT),从QLineEdit中提取字符,遍历表格的首列并比对字符串,即可查找到对应标签。这里比对使用了QString的contains函数,包含指定字符串即可匹配。还有一些搜索到结尾等等的处理就不细说了

void MainWindow::TagFind()
{
    QString strFind = ui->FindLineEdit->text();

    //没有输入
    if(strFind.isEmpty())
    {
        QMessageBox::warning(this, tr("错误"), tr("请输入地址"));
        return;
    }
    //遍历首列,从当前位置往下搜索,没选中默认为-1
    int currentRow = ui->TagTable->currentRow();
    int lastRow = currentRow;
    for(int i=currentRow+1; i<TagAddrList.size(); i++)
    {
        if( ui->TagTable->item(i,0)->text().contains(strFind, Qt::CaseInsensitive) )
        {
            //找到标签,将其置为选中状态
            ui->TagTable->setCurrentCell(i, QItemSelectionModel::Select);
            lastRow = i;
            return;
        }
    }

    if(currentRow == -1)
    {
        //找不到标签
        QMessageBox::warning(this, tr("查找结果"), tr("没有找到标签%1").arg(strFind));
    }
    else
    {
        //已找到最后一项
        QMessageBox::warning(this, tr("查找结果"), tr("已搜索到结尾"));
        ui->TagTable->setCu
tentCell(lastRow, QItemSelecionModel::Deselect);
    }
}

实现硬性指标的功能后,就开始研究界面的美化了,这里用到了QSS样式表,真的很强大很好用,详细的有机会再说吧。。这里附上读取样式表的代码,qss文件已经加载到资源文件了能吧。。这里附上读取样式表的代码,qss文件已经加载到资源文件里了。

void MainWindow::LoadQss(const QString &FilePath)
{
    //加载样式表
    QString qss;
    QFile qssFile(FilePath);
    qssFile.open(QFile::ReadOnly);
    if(qssFile.isOpen())
    {
        qss = qssFile.readAll();
        this->setStyleSheet(qss);
        qssFile.close();
    }
}

你可能感兴趣的:(QT)