QT如何使类的非成员函数可以访问控件?
void output_alert(ATTACKPATTERN *pOnepattern,struct tcp_stream *tcp_connection,int direction){
struct in_addr addr_1,addr_2;
//创建 QTreeWidgetItem 对象
QTreeWidgetItem *item = new QTreeWidgetItem(ui->detection_output);//这里会报错ui未被定义,我已经在ui窗口布置了一个QTreeWidget类名为detection_output的控件。
item->setText(0, QString::fromStdString(pOnepattern->attackdes));
qDebug()<<pOnepattern->attackdes;
if(direction==1){
addr_1.s_addr=(tcp_connection->addr).saddr;
item->setText(1, QString::fromUtf8(inet_ntoa(addr_1)));
qDebug()<<inet_ntoa(addr_1);
addr_2.s_addr=(tcp_connection->addr).daddr;
item->setText(2, QString::fromUtf8(inet_ntoa(addr_2)));
qDebug()<<inet_ntoa(addr_2);
}
else {
addr_2.s_addr=(tcp_connection->addr).saddr;
item->setText(1, QString::fromUtf8(inet_ntoa(addr_2)));
qDebug()<<inet_ntoa(addr_2);
addr_1.s_addr=(tcp_connection->addr).daddr;
item->setText(2, QString::fromUtf8(inet_ntoa(addr_1)));
qDebug()<<inet_ntoa(addr_1);
}
ui->detection_output->addTopLevelItem(item);
}
例如下面就可以直接使用ui->device_output访问改名称的控件。
void set_parameters::on_device_detection_clicked()
{
QTreeWidget* device_output = ui->device_output;
device_output->clear(); // 清空 device_output 中的所有记录
int num=0;
pcap_if_t *allDev,*pdev;
char buf[1024];
pcap_findalldevs(&allDev, buf);//找到所有的设备
for (pdev=allDev;pdev;pdev=pdev->next)
{
QTreeWidgetItem* item = new QTreeWidgetItem(device_output);
item->setText(0, QString::number(num)); // 设置设备号
item->setText(1, pdev->name); // 设置设备名称
device_output->addTopLevelItem(item);
num++;
}
if(num==0){
QMessageBox::information(this, tr("提醒"), tr("未找到可用设备,请检查网络连接!"));
}
}
要访问私有成员,可以声明友元函数,通过类对象访问。