• 5737阅读
  • 7回复

[提问]怎样在QT SQL中制作两张不同的view(视图) [复制链接]

上一主题 下一主题
离线zhaowanlan
 
只看楼主 倒序阅读 楼主  发表于: 2011-08-10
我用QT4.7 SDK,在QT C++示例的SQL中找到一个示例可以制作数据表,但是运行后结果显示:两张View表是一样的内容。
主要代码如下:


void initializeModel(QSqlTableModel *model1)
{    model1->setTable("qiyu");    
model1->setEditStrategy(QSqlTableModel::OnManualSubmit);  
model1->select();}
QTableView *createView(QSqlTableModel *model1,const QString &title = "")
{    QTableView *view1 = new QTableView;    view1->setModel(model1);
#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) || defined(Q_WS_SIMULATOR)    Q_UNUSED(title)
#else    view1->setWindowTitle(title);
#endif    return view1;}
int main(int argc, char *argv[]){    QSqlTableModel model1;
   initializeModel(&model1);
#if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) || defined(Q_WS_SIMULATOR)  
  QTabWidget *tabWidget = new QTabWidget;    
tabWidget->addTab(createView(&model1), "View 1");    
tabWidget->addTab(createView(&model1), "View 2");  
  tabWidget->showMaximized();
#endif    return app.exec();}
我试过再用void initializeModel(QSqlTableModel *model1)做了model2,在函数中用model1->setTable("TEST");但是结果中还是两个view同一张表,但是表换成了TEST表,估计是我建model2后model1的值就被覆盖了。那我怎么才能让两个view显示不同的表呢?需要改哪些地方?这个东西还有点急,求牛人指点一二啊~~~
离线wxj120bw

只看该作者 1楼 发表于: 2011-08-10
回 楼主(zhaowanlan) 的帖子
建议用这个[code][/code]整理下你的代码 既然急 那也别忙里出错
离线zhaowanlan
只看该作者 2楼 发表于: 2011-08-11



整理下代码?什么意思啊?不太懂,是这样哇?


  1. void initializeModel(QSqlTableModel *model1)
  2. {
  3.     model1->setTable("qiyu");
  4.     model1->setEditStrategy(QSqlTableModel::OnManualSubmit);
  5.     model1->select();
  6. }
  
这段是新建了个model1,用这个指向我在另一个cpp文件中写的"qiyu"数据表。
  1. QTableView *createView(QSqlTableModel *model1,const QString &title = "")
  2. {
  3.     QTableView *view1 = new QTableView;
  4.     view1->setModel(model1);
  5. }

这段就定义了view


  1. int main(int argc, char *argv[])
  2. {
  3.     QApplication app(argc, argv);
  4.     if (!createConnection())
  5.         return 1;
  6.     QSqlTableModel model1;
  7.     initializeModel(&model1);
  8. #if defined(Q_OS_SYMBIAN) || defined(Q_WS_MAEMO_5) || defined(Q_WS_SIMULATOR)
  9.     QTabWidget *tabWidget = new QTabWidget;
  10.     tabWidget->addTab(createView(&model1), "View 1");
  11.     tabWidget->addTab(createView(&model1), "View 2");
  12.     tabWidget->showMaximized();]
  13. }
  14. ]/code]
  15. 这段将model1指向view1和view2。
  16. 我在CPP中写了两张数据表"qixu"和"qiyu",要想让view1和view2分别显示这两张表怎么改代码呢?
  17. 我本来打算再定义一个model2,用如下代码:
  18. [code]
  19. void initializeModel(QSqlTableModel *model2)
  20. {
  21.     model2->setTable("qixu");
  22.     model2->setEditStrategy(QSqlTableModel::OnManualSubmit);
  23.     model2->select();
  24. }
  
但是编译就不通过,说是重定义了void initializeModel(QSqlTableModel *)


不知道这样说清楚了没?这个示例是QT C++自带示例中的一个,为QT C++->SQL->Table Model。全部的代码出自该示例。
麻烦高人指点下啊~~~
离线wxj120bw

只看该作者 3楼 发表于: 2011-08-11
回 2楼(zhaowanlan) 的帖子
[code][/code] 看效果,已经会使用
两个显示一样,是因为QSqlTableModel model1;缘故,你试着定义两个QSqlTableModel model1;
QSqlTableModel model12; 看看
编译不通过,是因为你定义相同的函数。
PS:多看别人的代码,还有多写代码
离线zhaowanlan
只看该作者 4楼 发表于: 2011-08-13
回 3楼(wxj120bw) 的帖子
谢谢啦,之前看你回复还不太理解你说的什么意思,今天突然想起来,void initializeModel(QSqlTableModel *)这个函数是我自定义的, 我虽然在写,但是脑子里老是以为那是函数库自带的,所以窘了。。。现在改了下就对了,3Q3Q~~~
对了,再请问一下,我现在输入的数据库表显示时貌似不支持中文,我建表时输入的中文在显示时都成了乱码。百度上说QT为各种文字提供支持,但是找了些资料看还是木有懂。请问怎么用Unicode解决这个问题啊?
离线wxj120bw

只看该作者 5楼 发表于: 2011-08-13
回 4楼(zhaowanlan) 的帖子
应该是编码的问题 看下QTextCodec帮助
离线zhaowanlan
只看该作者 6楼 发表于: 2011-08-14
看过了,但还是不太明白,没有具体的代码例子。我看了以后只知道有QString和TR两种方法,但是只会把HelloWorld里的字换成中文,在数据表里头怎么弄就不知道了。建表时要填很多中文,怎么把转换函数用上呢?
也有帖子说到使用lupdate 生成 hellotr_en.ts 文件,linguist 打开该文件进行翻译,使用lrelease (或通过linguist的菜单)将其转换成hellotr_en.qm文件。但是我找到个显示中文 的代码执行以后,并没有见到TS和QM后缀的文档出现啊?还是我要自己建?但我没建也能显示中文了啊??实在不明白~~
离线zhaowanlan
只看该作者 7楼 发表于: 2011-08-14
回 5楼(wxj120bw) 的帖子

对了,我用的是QT 4.7SDK
快速回复
限100 字节
 
上一个 下一个