信号/插槽 Qt5 C++
Signals/slots Qt5 C++
>我和槽建立了连接,调用了函数,通过qDebug((输出了值,但是表没有变化,怎么了?
主窗口.cpp
<pre>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->tableWidget->horizontalHeader()->hide();
ui->tableWidget->verticalHeader()->hide();
//Matrix *matr=new Matrix;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_updateTbl(int **mas, int n){
for(int i=0;i<n;i++){
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
for(int j=0;j<n;j++){
ui->tableWidget->insertColumn(ui->tableWidget->columnCount());
ui->tableWidget->setItem(i,j,new QTableWidgetItem( QString::number(mas[i][j])));
}
}
}
</pre>
主.cpp
<pre>
#include "mainwindow.h"
#include <QApplication>
#include "matrix.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
Matrix matr;
MainWindow mywnd;
QObject::connect(&matr,SIGNAL(updateTbl(int**,int)), &mywnd, SLOT(on_updateTbl(int**,int)));
matr.upTable();
return a.exec();
}
</pre>
矩阵.cpp
<pre>
#include "matrix.h"
#include <QFile>
#include <QDebug>
#include <QString>
#include <QTextStream>
Matrix::Matrix()
{
QFile file("mas.txt");
this->mas=alloc_mem(n,n);
array_to_file(file,n,n);
fill_array(file,mas,n,n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if (mas[i][j]!=mas[n-j-1][n-i-1]) {
symmetrical=false;
break;
}
}
}
if(symmetrical){
for(int i=0;i<n;i++){
mas[i][i]=0;
mas[i][n-i-1]=0;
}
//print(mas,n,"Измененная");
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(mas[i][j]) vec.append(mas[i][j]);
}
}
}
int** Matrix::alloc_mem(int height, int width){
int** mas = new int*[height];
for (int i = 0; i < height; i++) {
mas[i] = new int[width];
}
return mas;
}
void Matrix::array_to_file(QFile &file, int height, int width){
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
int to_mas;
QTextStream out(&file);
for (int i = 0; i < height; i++){
for (int j = i + 1; j < width; j++){
to_mas=rand()%100-50;
out<<to_mas<<" ";
}
out<<1<<" ";
out<<"n";
}
file.close();
}
void Matrix::fill_array(QFile &file, int **mas, int height, int width){
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
QTextStream in(&file);
QStringList matr = in.readAll().split("n");
for (int i = 0; i < height; i++){
for (int j = 0; j < width-i; j++){
mas[i][j]=matr.at(i).split(" ").at(j).toInt();
mas[height-1-j][width-1-i]=mas[i][j];
}
}
file.close();
}
void Matrix::print(int **mas, int n, QString name){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
}
}
}
void Matrix::upTable(){
emit updateTbl(mas,n);
}
</pre>
主窗口.h
<pre>
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void on_updateTbl(int**,int);
};
#endif // MAINWINDOW_H
</pre>
矩阵.h
<pre>
#ifndef MATRIX_H
#define MATRIX_H
#include <QVector>
#include <QFile>
#include <QString>
#include <QObject>
class Matrix:public QObject
{
Q_OBJECT
public:
Matrix();
~Matrix(){}
//bool check_symmetrical(int **mas,int n);
void print_vector(QVector<int> vector);
int** alloc_mem(int height,int width);
void array_to_file(QFile& file,int height,int width);
void fill_array(QFile& file,int **mas,int height,int width);
void print(int** mas,int n,QString name);
void upTable();
private:
int n=10;
int **mas;
bool symmetrical=true;
QVector<int> vec;
signals:
void updateTbl(int**,int);
};
#endif // MATRIX_H
</pre>
如果我将此代码复制到构造函数中,那么一切都很好,一切都会改变,但函数没有任何效果
当不显示带有更新表的小部件时,您希望如何查看带有值的表?
MainWindow w;
w.show(); // <--- w is displayed, tableWidget is not modified in this widget
Matrix matr;
MainWindow mywnd; // <--- mywnd is not displayed
QObject::connect(&matr,SIGNAL(updateTbl(int**,int)), &mywnd, SLOT(on_updateTbl(int**,int)));
// mywnd is updated
matr.upTable();
加
mywnd.show();
您将看到另一个包含更新内容的小部件。
相关文章:
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 控制台输出在 Qt5 中未正确显示
- 在Qt5中使用QTextSteam时的"使用已删除功能"
- Qt5 从 MySQL 数据库中选择数据
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- Qt5 用户界面编译器:-i 选项不可用
- Qt5 throws std::bad_alloc
- 如何避免在 cmake 中自动链接 Qt5 库?
- 动态更改 qt5 选项卡名称
- 可能的Qt5错误:调用setFixedSize()禁用主窗口的关闭按钮(在Win7下)
- QT5 信号不会激活插槽内的功能
- 如何在使用 Qt5 构造函数时将非常量参数修改为常量参数?
- 如何在 Qt5 中执行多个 QProcess
- Qt5 [make -snap] 无法正确编译:进程"/usr/bin/snap"代码 1 退出
- 使用 Qt5 SQL 进行异步数据库访问的策略
- Qt5 ui,多个窗口:如何从窗口 1 访问窗口 2 中的 UI 对象
- 如何使用新语法QT5将信号连接到信号?
- 坚持编译QDoc以在Windows上构建qt5